【发布时间】:2014-04-27 19:52:28
【问题描述】:
编辑:对不起,我忘了说这是在 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]);
在第一个空闲语句中给出了检测到堆损坏的错误。有什么建议吗?
【问题讨论】:
-
(int**)malloc(sizeof(int)*2)看起来不对。 -
(您的其他问题)您对
free的调用顺序错误。你不能释放一个外部数组然后释放它的元素。太晚了,已经没有元素了。
标签: c arrays visual-studio 2d free