p=(struct attribute *) malloc(sizeof(at));
if(p=='\0')
{
printf("out of memory.\n");
return;
}
后面把p指向一个结构数组,并开始赋值
我的疑问是return起到什么作用?如果执行了if,输出了out of memory,看样子还会继续向下执行,开始赋值吗?貌似没有补救,只是礼貌的检查一下似的。。。
那么这个if有什么意义吗?后面开始往P指向的结构体存储了,这样的话就算out of memory,也没有针对这种情况的操作
追答此处if是判断动态开辟存储空间是否成功,但后续再没有代码,而是用return 直接结束了,所以没意义
追问1,在什么情况下会开辟不成功?
2,是不是一般都会成功?
3,如果不成功怎么补救,应该写什么代码处理不成功的情况?
肯定不是说都能成功,所开辟的空间肯定在内存是是连续的空间,如果内存剩余连续空间量不足就会出错,出错时malloc返回NULL, 因此要使用动态开辟,必须测试是否开辟成功,特别是开辟大空间。
如:
char *p;
p=(char * )malloc(1000000);
if( p!=NULL )
strcpy(p,"你好");
else
{ printf("开辟空间出错");
exit(0);
}