sách gpt4 ai đã đi

c - 自由(): invalid next size (fast)

In lại 作者:行者123 更新时间:2023-11-30 16:55:19 29 4
mua khóa gpt4 Nike

我正在用 C 编写一个程序,我需要读入一个文件并打印出每个至少 4 个字符长的字符串。我在分配要使用的内存时遇到问题。字符串可以任意长。我试图将缓冲区分配给文件的大小,然后在最后释放它,但我显然错过了一些重要的东西。这是我的代码:

#include 
#include

int main(int argc, char **argv) {
FILE *f = fopen(argv[1], "r");
char *buffer = malloc(8 * sizeof(f));
char ch;
int i = 0;

while(fread(&ch, 1, 1, f) != 0) {
if((ch >= 32 && ch <= 126) || ch == 9) {
buffer[i++] = ch;
}
else {
buffer[i] = '\0';
if (i >= 4) {
printf("%s\n", buffer);
}
i = 0;
}
}

free(buffer);
fclose(f);
trả về 0;
}

使用文件运行它可以正确输出所有字符串(每行 1 个),然后给出此错误消息。

*** glibc detected *** ./mystrings: free(): invalid next size (fast): 0x0000000000601250 ***
======= Backtrace: =========
/lib64/libc.so.6[0x34ff676166]
/lib64/libc.so.6[0x34ff678ca3]
./mystrings[0x4006e9]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x34ff61ed1d]
./mystrings[0x400569]
======= Memory map: ========
00400000-00401000 r-xp 00000000 00:1a 94896226 /afs/pitt.edu/home/a/s/asm122/private/cs449/project2/mystrings
00600000-00601000 rw-p 00000000 00:1a 94896226 /afs/pitt.edu/home/a/s/asm122/private/cs449/project2/mystrings
00601000-00622000 rw-p 00000000 00:00 0 [heap]
34fee00000-34fee20000 r-xp 00000000 fd:00 127 /lib64/ld-2.12.so
34ff01f000-34ff020000 r--p 0001f000 fd:00 127 /lib64/ld-2.12.so
34ff020000-34ff021000 rw-p 00020000 fd:00 127 /lib64/ld-2.12.so
34ff021000-34ff022000 rw-p 00000000 00:00 0
34ff600000-34ff78b000 r-xp 00000000 fd:00 131 /lib64/libc-2.12.so
34ff78b000-34ff98a000 ---p 0018b000 fd:00 131 /lib64/libc-2.12.so
34ff98a000-34ff98e000 r--p 0018a000 fd:00 131 /lib64/libc-2.12.so
34ff98e000-34ff98f000 rw-p 0018e000 fd:00 131 /lib64/libc-2.12.so
34ff98f000-34ff994000 rw-p 00000000 00:00 0
3505a00000-3505a16000 r-xp 00000000 fd:00 609 /lib64/libgcc_s-4.4.7-20120601.so.1
3505a16000-3505c15000 ---p 00016000 fd:00 609 /lib64/libgcc_s-4.4.7-20120601.so.1
3505c15000-3505c16000 rw-p 00015000 fd:00 609 /lib64/libgcc_s-4.4.7-20120601.so.1
7ffff7fd3000-7ffff7fd6000 rw-p 00000000 00:00 0
7ffff7ffa000-7ffff7ffe000 rw-p 00000000 00:00 0
7ffff7ffe000-7ffff7fff000 r-xp 00000000 00:00 0 [vdso]
7ffffffea000-7ffffffff000 rw-p 00000000 00:00 0 [stack]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Đã hủy bỏ (đã đổ lõi)

我确信这是一个愚蠢的错误,如果有人有任何想法如何解决这个问题,请告诉我。谢谢!

1 Câu trả lời

sizeof(f) trở lại f 指针的大小,而不是文件的大小。

您可以在此处阅读有关如何获取文件大小的信息:How can I get a file's size in C?

但是,更好的方法可能是使用 fgets:https://www.tutorialspoint.com/c_standard_library/c_function_fgets.htm

您可以分配任意大小的缓冲区,例如 256 字节。然后尝试读取最长 256 字节的行。如果您的分数低于 256,您将需要排队等候。否则 - 增加缓冲区的大小并重试。

关于c - 自由(): invalid next size (fast),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333485/

29 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com