我有一个全局声明的结构:
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]);
在第一个空闲语句中给出了检测到堆损坏错误。有什么建议吗?
答案 0 :(得分:2)
这是一个开始:
你的&#34;外部阵列&#34;有两个整数的空间,而不是两个指向整数的指针。
HASH_TABLE_SIZE是否等于2?否则,您的第一个for循环将写入您刚分配的数组之外。