我得到了以下代码:

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) {

您不想在这里取消对缓冲区的引用,就像在代码的第一位中那样这样做会给缓冲区中的第一个字符,但您需要缓冲区的地址。

09-17 20:08