【发布时间】:2013-09-28 16:43:06
【问题描述】:
当我尝试调用 free() 函数来释放内存时,它无法正常工作。这是我的代码:
unsigned char *indata;
unsigned char *outdata;
int file_func(const char *filename) {
//some other variables
for(i=0;i < no_of_files;i++) {
indata = malloc(sizeof(unsigned char));
outdata = malloc(sizeof(unsigned char));
//counts the number of characters from filename
numCharacters = readfile(filename, indata);
/* perform some operation on indata and get outdata(size is same as indata)*/
writefile(filename, outdata); //writes outdata to filename
free(indata);
free(outdata);
}
}
上面的代码不能正常工作,因为 free() 在 indata 和 outdata 中存储了一些随机垃圾值(因为它们变成了悬空指针)。所以我尝试在释放后将指针设置为 null,因为我正在重用与以下相同的指针:
free(indata);
indata = NULL;
free(outdata);
outdata = NULL;
即使这样我的代码也崩溃了:
双重释放或损坏(输出):0x00000000025aa240 *
我该如何克服这个问题,或者是否有任何其他替代方法可以在循环中使用动态大小的指针。谢谢。
【问题讨论】:
标签: c pointers memory-management memory-leaks free