我使用realloc
替換malloc
時出錯。realloc:釋放對象的校驗和無效
下面的這段代碼在我的電腦上運行正常。
int vector_grow(Vector* vec) {
unsigned long newcap;
int * newarr;
if (0 == vec->cap) {
vec->arr = (int*)malloc(START_CAPACITY * sizeof(*vec->arr));
if (NULL == vec->arr)
return -1;
vec->cap = START_CAPACITY;
return 0;
}
newarr = malloc (newcap * sizeof(*vec->arr));
if (NULL == newarr)
return -1;
memcpy (newarr, vec->arr, vec->len * sizeof(*vec->arr));
free (vec->arr);
vec->arr = newarr;
vec->cap = newcap;
return 0;
}
我想改變malloc
到realloc
,但出現錯誤。
int vector_grow(Vector* vec) {
unsigned long newcap;
if (0 == vec->cap) {
vec->arr = (int*)malloc(START_CAPACITY * sizeof(*vec->arr));
if (NULL == vec->arr)
return -1;
vec->cap = START_CAPACITY;
return 0;
}
newcap = 2 * vec->cap;
if ((vec->arr = (int*)realloc(vec->arr, newcap * sizeof(int))) == NULL)
return -1;
return 0;
}
它說
的malloc:***錯誤對象0x7fca64c02598:用於釋放對象不正確的校驗 - 對象被釋放後,可能被修改。
我不知道這兩個代碼片段之間有什麼區別,如果你知道是什麼原因導致錯誤,請告訴我!非常感謝你!
注意,使用'realloc()的'等引起潛在的內存泄漏。 –
在第一個代碼片段變量'newcap'中沒有初始化?! –
.uniuuitive感覺情況Yoda另外 –