C语言怎样选择出指定地址的内存并且判断是否为空。求代码。。。

随机选出五个4字节内存块并且检测是否为空,如果为空将随机int赋值进去。求解啊。。。。
不能malloc申请分配内存而是要直接产生随机的地址,判断该地址内存是否为空。

“空”至少有两种理解:内容为0和数据无效。不知说的是哪一种,若是前者,可如下写代码——
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "time.h"//
#include "stdlib.h"
void main(void){
int n,i,*pp[4];
srand((unsigned)time(NULL));
for(i=0;i<4;i++){
pp[i]=&n+rand()%330;
if(*pp[i]) printf("Unit 0x%X is not empty!\n",pp[i]);
else printf("Unit 0x%X is empty!\n",pp[i]);
}
}
严格说来这代码的产生的地址并不是随机的,是控制在可以访问的范围内的。因为不控制的话,随机产生的地址落在不可访问区就会出错而终止执行。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-08
首先,通过随机函数rand可以为int指定随机值。代码如下:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int a;//取该变量的指针就得到了栈空间的首地址。
int *p = &a + rand();
*p = 8;
printf("%d", *p);
}
至于该能存地址是否为空那就看p是不是等于0了,对于上边的一小段代码而言,操作系统只为main函数分配了栈空间,所以除非p取值在栈空间,否则对p指向的任何内存地址赋值都是非法的,C语言要求内存需要先申请在赋值,当然这些检查都是debug版本才有,release版本是没有的,所以在visual studio环境下,对上面代码进行release编译即可。
第2个回答  推荐于2016-07-07

1、“空”至少有两种理解:内容为0和数据无效。不知说的是哪一种。严格说来这代码的产生的地址并不是随机的,是控制在可以访问的范围内的。因为不控制的话,随机产生的地址落在不可访问区就会出错而终止执行。

2、例程:

//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "time.h"//
#include "stdlib.h"
void main(void){
    int n,i,*pp[4];
    srand((unsigned)time(NULL));
    for(i=0;i<4;i++){
        pp[i]=&n+rand()%330;
        if(*pp[i]) printf("Unit 0x%X is not empty!\n",pp[i]);
        else printf("Unit 0x%X is empty!\n",pp[i]);
    }
}

第3个回答  2014-01-08
使用rand()就可以产生一个范围内的随机值,然后判断就行了呗比如随机值保存在usigned int i中
if((viud*)i != null)强制将i的值转换为一个地址。
相似回答