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

理想は、この for ループに入るべきではありません。しかし、それはゴミの価値のせいかもしれません。わからない!

4

2 に答える 2

1

記憶に何が含まれているかを知ることができないため、何が起こるかは予測できません。callocの代わりに を使用するかmallocmemsetを呼び出した後にメモリを使用する必要がありますmalloc

個人的にcallocは、コード行を節約し、後でコードを読みやすくするため、使用することを好みます。

于 2013-07-16T21:21:14.093 に答える