【发布时间】:2013-07-15 06:17:16
【问题描述】:
声明简单结构:
struct s {
char* addr;
};
s *ips;
现在分配结构数组内存
num = 5
ips = (r *) malloc(num * sizeof(r));
我知道 malloc 只是分配内存,并没有初始化,可能会有垃圾值。
现在我想知道如果我不初始化一个,并尝试访问会发生什么?
//Init for 4 of them
for(int i = 0; i < num-1; i++)
ips[i].addr = strdup("123");
//Accessing un-initialize one:
if(ips[4].addr) {
printf("Accessing uninitialize one and lets say freeing!!!");
free(ips[4].addr);
}
理想不应该进入这个 for 循环。但后来我认为可能是因为垃圾价值。我不确定!
【问题讨论】:
-
恭喜!您已经问过第 1,000,000 个“当我调用未定义的行为时会发生什么?”题!您的 C 标准免费副本已在邮件中。
-
只要你写的代码不会编译你就应该是安全的。
-
与 sizeof(r) 而不是 s 配合得非常好 :)
-
不要对 malloc() 返回地址进行类型转换