为什么执行此代码时堆会被破坏?我还没有那么多的内存分配。
#include <stdlib.h>
void main()
{
char **field, x, _fieldsX, _fieldsY;
_fieldsX = 8;
_fieldsY = 16;
// Allocation
field = malloc(sizeof(char*) * _fieldsX);
for (x = 0; x < _fieldsY; x++)
field[x] = malloc(sizeof(char) * _fieldsY);
// Freeing
for (x = 0; x < _fieldsY; x++)
free(field[x]);
free(field);
}
答案 0 :(得分:1)
你在第一个循环中超出了分配区域的范围:
field = malloc(sizeof(char*) * _fieldsX);
for (x = 0; x < _fieldsY; x++)
field[x] = malloc(sizeof(char) * _fieldsY);
请注意,您正在分配_fieldsX
个项目,但该循环在该区域内进行_fieldsY
次。
答案 1 :(得分:0)
代码将字段分配为_fieldsX的长度,但设置_fieldsY元素。这是不正确的。