我得到了以下代码:
char buffer[2047];
int charsRead;
do {
if(fscanf(file, "%2047[^\n]%n%*c", buffer, &charsRead) == 1) {
// Do something
}
} while (charsRead == 2047);
我想将这段代码转换为使用动态分配的变量,这样在经常调用这段代码时,我就不会出现严重的内存泄漏。因此,我试着:
char *buffer = malloc(sizeof(char) * 2047);
int *charsRead = malloc(sizeof(int));
do {
if(fscanf(file, "%2047[^\n]%n%*c", *buffer, charsRead) == 1) {
// Do something
}
} while (*charsRead == 2047);
不幸的是,这不起作用我总是在fscanf调用的if语句之前出现“EXC_BAD_ACCESS”错误。
我做错什么了?
谢谢你的帮助!
--里亚尔
最佳答案
由于编译器正在为您管理内存,原始代码泄漏的可能性远小于新代码,但如果您认为必须,请更改为:
if(fscanf(file, "%2047[^\n]%n%*c", buffer, charsRead) == 1) {
您不想在这里取消对缓冲区的引用,就像在代码的第一位中那样这样做会给缓冲区中的第一个字符,但您需要缓冲区的地址。