我有一个简单的程序来填充 2D 动态字符数组。分配照常进行。我的问题依赖于释放数组。我在 VC++ 2008 上使用纯 C。
这是我分配和初始化数组时的一段代码:
char** messsages = (char**)malloc(5*sizeof(char*));
initValorArrayMsgs(messsages, 5);
insertMsgToArray(5, messsages , "Test message.");
void insertMsgToArray(int totalLines, char** msgsArray, const char* msgToInsert)
{
int line = 0;
int size= strlen(msgToInsert);
for(; line < totalLines; line ++)
{
if(strlen(msgsArray[line ]) == 0)
{
msgsArray[line ] = (char*)malloc(sizeof(char) * size);
strcpy(msgsArray[line], msgToInsert);
break;
}
}
}
这是我释放数组的代码
void freeArrayMsgs(char** arry, int lines)
{
int i = 0;
for(; i < lines; i++)
{
if(strlen(arry[i]) == 0){
break;
}
free(arry[i]);
}
free(arry);
}
当程序尝试释放第一个数组时,它会引发堆损坏异常。
阅读一些关于 SO 的帖子,我正确地释放了我的数组。那么,为什么我会收到 hep 损坏异常?