0

声明简单结构:

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);
}

Ideal 不应该进入这个 for 循环。但后来我认为可能是因为垃圾价值。我不确定!

4

2 回答 2

1

初始化变量。

没有初始化 - 所有的赌注都关闭了。
ips[4].addr,如您所知,未初始化。所以使用:

// Various code
...
if(ips[4].addr) {

是一种复杂的简单询问以下内容的方式?

int i;
if (i) {

i每次运行程序时的值都可能相同。如果可以不一样。没有应该发生的事情的理想。这是简单的未定义行为(UB)。

于 2013-07-16T22:10:36.270 回答
1

将会发生什么将是不可预知的,因为您无法知道内存包含什么。您应该使用calloc而不是malloc,或者memset调用后的内存malloc

就我个人而言,我更喜欢使用calloc它,因为它可以节省一行代码,并使以后阅读代码更容易一些。

于 2013-07-16T21:21:14.093 回答