能力值:
( LV3,RANK:30 )
|
-
-
2 楼
每次运行的地址?不一样啊
100
162140168
100
161984520
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
奇怪了,为什么在我的电脑上,申请的都是一样的
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
难道说 这个就是传说中的巧了!
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
这个感觉可以参考潘爱民老师的一本书。。《Windows内核原理与实现》,讲WRK的。
然后说Windows的内存分配分了几个步骤。
不过我有一个方法确定你可以每次产生不同的地址。
在vista之后,Windows都默认开了ASLR地址随机化功能,就是每次开机的时候在系统范围内确定几个基地址,每次启动时地址一般不同。
因此在vista以及其他的NT6.0以后的系统中,你只需要重启,每次就得到不同的地址了。
再说了,你的进程独享一个平坦地址空间,每次分配同一个内存地址不是一个自然的事情么。。
分配的地址还包含随机因素那反而神了。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我试验了一下。把程序放到桌面和放到E盘运行。分配的地址都是不一样的。但每次运行申请的地址都是一样的。没办法 ,只有改成下面程序了。用随机数打乱
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
int hit;
srand(GetTickCount());
int i;
for( i=rand(); i != 0; i-- )
malloc(4);
int *blood = (int*) malloc( sizeof(int));
*blood = 100;
printf( "当前血量:\n%d", *blood );
while(1)
{
printf( "\n输入攻击数值:");
scanf( "%d",&hit );
printf( "当前血量:\n%d", *blood -= hit );
}
free(blood);
return 0;
}
|
|
|