对访问malloc内存感到困惑(未初始化)

时间:2013-07-16 21:18:08

标签: c malloc

声明简单结构:

struct s {
    char* addr;
};

s *ips;

现在分配那个struct array memory

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循环。但后来我认为因为垃圾价值可能会。我不确定!

2 个答案:

答案 0 :(得分:1)

将会发生什么事情是不可预测的,因为你无法知道所包含的内存。在调用calloc后,您应该使用malloc代替memsetmalloc内存。

我个人更喜欢使用calloc,因为它会保存一行代码并使以后更容易阅读代码。

答案 1 :(得分:0)

初始化变量。

没有初始化 - 所有赌注都关闭 {em>知道的ips[4].addr未初始化。所以使用:

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

是一种简单的方式,简单地询问以下内容是做什么的?

int i;
if (i) {

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