私はOS Xで作業しています。次のような簡単なコードを書きました
pTest = (char*)malloc(sizeof(char) * 3);
pTest[0] = 0;
pTest[1] = 1;
pTest[2] = 2;
pTest = (char*)realloc(pTest, sizeof(char) * 2);
printf("%d %d %d %d\n", pTest[0], pTest[1], pTest[2], pTest[3]);
pTest[3] = 100; // memory access violation.
このコードでアクセス違反が発生しない場合、なぜ realloc が必要なのですか? 小さなサイズのヒープ セグメントにメモリが割り当てられていますが、必要なのはpTest[100]
、pTest[2048]
、などのさらなるインデックスにアクセスすることだけですpTest[65536]
。
誰かがアクセス違反を引き起こさない理由を説明できますか?