释放二维阵列 - 检测到堆腐蚀

时间:2014-04-27 19:52:29

标签: c arrays visual-studio 2d free

编辑:对不起,伙计们,我忘了提到这是在VS2013中编码的。

我有一个全局声明的结构:

typedef struct data //Struct for storing search & sort run-time statistics.
{
    int **a_collision;
} data;

data data1;
然后我分配了我的记忆:

data1.a_collision = (int**)malloc(sizeof(int)*2);   //Declaring outer array size - value/key index.
for (int i = 0; i < HASH_TABLE_SIZE; i++)   
    data1.a_collision[i] = (int*)malloc(sizeof(int)*HASH_TABLE_SIZE);   //Declaring inner array size. 

然后我初始化所有元素:

//Initializing 2D collision data array.
for (int i = 0; i < 2; i++)
for (int j = 0; j < HASH_TABLE_SIZE; j++)
    data1.a_collision[i][j] = NULL;

最后,我希望释放记忆(失败)。我没有成功地尝试过关于SO的一些答案。

free(data1.a_collision);
for (int i = 0; i < HASH_TABLE_SIZE; i++)
    free(data1.a_collision[i]);

在第一个空闲语句中给出了检测到堆损坏错误。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这是一个开始:

你的&#34;外部阵列&#34;有两个整数的空间,而不是两个指向整数的指针。

HASH_TABLE_SIZE是否等于2?否则,您的第一个for循环将写入您刚分配的数组之外。