我正在使用 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]
。
有人可以解释为什么不会导致访问冲突吗?