ryy*_*yst 1 c malloc scanf dynamic
我得到以下代码:
char buffer[2047];
int charsRead;
do {
if(fscanf(file, "%2047[^\n]%n%*c", buffer, &charsRead) == 1) {
// Do something
}
} while (charsRead == 2047);
Run Code Online (Sandbox Code Playgroud)
我想将此代码转换为使用动态分配的变量,以便在调用此代码时,我不会遇到大量内存泄漏.因此,我试过这个:
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);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.我总是得到"EXC_BAD_ACCESS"错误,就在使用fscanf调用的if语句之前.我究竟做错了什么?
谢谢你的帮助!
- Ry
小智 5
原始代码泄漏的可能性远远小于新代码,因为编译器正在为您管理内存,但如果您觉得必须,请更改为:
if(fscanf(file, "%2047[^\n]%n%*c", buffer, charsRead) == 1) {
Run Code Online (Sandbox Code Playgroud)
你不想在这里取消引用缓冲区,比你在第一段代码中所做的更多.这样做会给你缓冲区中的第一个字符,但你想要缓冲区的地址.