c-与访问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);
}

理想不应该进入这个循环。但我认为这可能是因为垃圾的价值。我不确定!

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

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

初始化变量

无需初始化-所有赌注都已取消。
正如您所知,ips[4].addr尚未初始化。因此使用:

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

是一种复杂的简单提问方式吗?

int i;
if (i) {

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

相关内容

  • 没有找到相关文章