0

このコードを実行するとヒープが破損するのはなぜですか? 私はまだメモリ割り当てをあまり扱っていません。

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

2 に答える 2

1

最初のループで、割り当てられた領域の境界から出ます。

field = malloc(sizeof(char*) * _fieldsX);

for (x = 0; x < _fieldsY; x++)
    field[x] = malloc(sizeof(char) * _fieldsY);

_fieldsXアイテムを割り当てていることに注意してください。ただし、ループは_fieldsYその領域を何度も繰り返します。

于 2012-10-24T12:33:02.480 に答える
0

このコードは、長さが _fieldsX になるようにフィールドを割り当てますが、_fieldsY 要素を設定します。これは正しくありません。

于 2012-10-24T12:35:40.413 に答える