我想創建一個指向任意型別的指標陣列并調整其大小。但由于某種原因,這在第五次迭代中崩潰了:
#include <stdlib.h>
#include <stdio.h>
int main() {
int **data = NULL;
size_t size = 0;
for (size_t i = 0; i < 10; i) {
printf("begin iteration #%lu...\n", i 1);
int *a = malloc(sizeof *a);
data = realloc(data, size);
data[size - 1] = a;
}
}
輸出是:
begin iteration #1...
begin iteration #2...
begin iteration #3...
begin iteration #4...
begin iteration #5...
realloc(): invalid next size
Aborted (core dumped)
我知道已經有成百上千的問題了realloc(): invalid next size,我瀏覽了其中的許多問題,但我仍然無法弄清楚。我很確定我在這里遺漏了一些相當基本的東西。
uj5u.com熱心網友回復:
您沒有分配足夠的空間:
data = realloc(data, size);
這告訴realloc分配 size bytes,所以在第一次互動時 1 個位元組,在第二次互動時 2個位元組,依此類推。這不足以保存您想要存盤的內容,因此您正在寫入超過分配記憶體的末尾,從而觸發未定義的行為。
您需要將此值乘以元素大小。
data = realloc(data, size * sizeof *data);
此外,您在這里使用了錯誤的格式說明符:
printf("begin iteration #%lu...\n", i 1);
對于 a size_t,大小修飾符是z:
printf("begin iteration #%zu...\n", i 1);
uj5u.com熱心網友回復:
好吧,至少有一個問題是您分配的是size位元組而不是元素。
data = realloc(data, size * sizeof *data);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327463.html
