声明简单结构:
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);
}
理想不应该进入这个循环。但我认为这可能是因为垃圾的价值。我不确定!
将会发生什么是不可预测的,因为您不知道内存中包含什么。您应该使用calloc
而不是malloc
,或者在调用malloc
之后使用memset
作为内存。
就我个人而言,我更喜欢使用calloc
,因为它可以节省一行代码,并使以后阅读代码更容易。
初始化变量
无需初始化-所有赌注都已取消。
正如您所知,ips[4].addr
尚未初始化。因此使用:
// Various code
...
if(ips[4].addr) {
是一种复杂的简单提问方式吗?
int i;
if (i) {
每次运行程序时,i
的值可能是相同的。如果可以不同。对应该发生的事情没有理想的想法。这是一个简单的未定义行为(UB)。