声明简单的结构:困惑与访问内存的malloc(未初始化)
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);
}
理想不应该进入这个循环。但是,我认为,因为它可能是垃圾值。我不确定!
恭喜!你问了第1,000,000个“当我调用未定义的行为时会发生什么?”题!您的免费C标准副本在邮件中。 –
[未定义,未指定和实现定义的行为]的可能的重复(http://stackoverflow.com/questions/2397984/undefined-unspecified-and-implementation-defined-behavior) –
只要你编写不编译的代码你应该安全。 –