我试图用C来调整数组的大小,但是我得到了一个运行时断言
这是代码片段:
int *v = malloc(sizeof(v) * 5);
memcpy(v, (int[]){ 0, 1, 2, 3, 4,}, 5 * sizeof(int));
v = realloc(v, sizeof(int) * 6);
v[6] = 6;
for(int i = 0; i < 5; i++)
{
printf("%d", v[i]); //assertion at this line
}
当我运行这个程序时,我就知道了:
a.out: malloc.c:2539: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
我不明白
我也没有收到任何警告
发布于 2021-02-18 10:49:51
您有两个可能导致内存损坏的bug:
sizeof(v)
-> sizeof(*v)
v[6] = 6;
,这是不允许的,因为您为6项而不是7项分配了空间。C得到了0索引数组,就像他们在数组初学者类中教我们的那样。。
https://stackoverflow.com/questions/66258358
复制相似问题