我正在尝试将一个2维整数数组复制到一个临时2维整数数组并将其返回。我在下面进行了介绍,但是遇到了一个非常可疑的malloc错误。我尝试用valgrind检查它,但找不到有用的东西
int **get_grid_state(int **grid, int height, int length) {
int **grid_state;
int i;
grid_state = malloc(height * sizeof(int*));
for (i = 0; i < height; i++) {
grid_state[i] = malloc(length);
memcpy(grid_state[i], grid[i], length);
}
return grid_state;
}
解除稳定错误消息如下:
program: malloc.c:2372: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long) old_end & pagemask) == 0)' failed.
Aborted
您的方法是正确的,除了length
内部循环中的大小:它应该length * sizeof(int)
或sizeof(**grid)
:
grid_state[i] = malloc(length * sizeof(**grid));
memcpy(grid_state[i], grid[i], length * sizeof(**grid));
对于原因令人不安的错误是子阵列分配太小,你可能修改它们在程序的其它部分,导致的一些腐败现象malloc
,在以后的某个呼叫被检测到的分配功能的一个内部数据:malloc()
,free()
,calloc()
,realloc()
...
还要注意,您不检查这些malloc()
调用的返回值。如果由于某种原因malloc
无法分配内存,则将调用未定义的行为,而不是NULL
优雅地返回。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句