我使用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另外 –