当试图释放二维阵列时堆积腐败

时间:2012-10-24 12:30:24

标签: c heap corruption

为什么执行此代码时堆会被破坏?我还没有那么多的内存分配。

#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);
}

2 个答案:

答案 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元素。这是不正确的。