我得到了以下代码:
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) {
您不想在这里取消引用缓冲区,就像您在第一段代码中所做的那样。这样做会给您缓冲区中的第一个字符,但您需要缓冲区的地址。
关于c - 将 fscanf 与动态分配的缓冲区一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2529627/