- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 C 编写一个程序,我需要读入一个文件并打印出每个至少 4 个字符长的字符串。我在分配要使用的内存时遇到问题。字符串可以任意长。我试图将缓冲区分配给文件的大小,然后在最后释放它,但我显然错过了一些重要的东西。这是我的代码:
#include <stdlib.h>
#include <stdio.h>
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);
return 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]
Aborted (core dumped)
我确信这是一个愚蠢的错误,如果有人有任何想法如何解决这个问题,请告诉我。谢谢!
最佳答案
sizeof(f)
返回 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/
这是我正在调试的函数: boolean adin_memory(char* buffer, int size_chunck, int end_flag){ global_buffer = my
我正在尝试为具有自由 float 底座的机器人计算末端执行器空间速度雅可比行列式。由于自由 float 基数,雅可比应该包含一个基数组件和一个操纵器注释(参见 https://spart.readth
procedure FreeListObjects( l : TStrings); var i : integer; BEGIN FOR i := 0 TO l.Count -1 DO BEG
我正在探索 Haskell 中的选项,这些选项可以让我将业务逻辑与底层系统的技术实现分开。例如,在 Web 服务器的上下文中,将 Web 服务器处理其接收的信息的方式与其读取和写入数据库的方式分开。要
我的目标是使用来自 ActiveMQ 的 WebSphere Liberty Appserver(完整的 Java EE 标准)使用消息。不幸的是,我不知道如何配置 WebSphere Liberty
我以这种方式分配了一个非方阵,但我不确定我是否正确使用了释放 float **matrix_alloc(int m /* rows */, int n /* columns */) { int
我在阅读 refuting the notion 之后的第 13.5 节内置运算符不参与重载决议,并注意到没有关于 operator->* 的部分。它只是一个通用的二元运算符。 它的兄弟operato
我正在尝试使用 Libelf 库来获取有关某些 elf 文件的一些信息。但我不断收到这些“对 [...] 的 undefined reference ”。我从 synaptic 安装了 libelf(
我有创建动态结构数组的波纹管代码。 #include #include #include typedef struct { int flag; char* ip; } ip_mo
我是 StackOverflow 的新人。我现在正在学习C指针。 这是我的代码: #include #include int alloc(int* p){ p = (int*) mallo
我是 StackOverflow 的新人。我现在正在学习C指针。 这是我的代码: #include #include int alloc(int* p){ p = (int*) mallo
我正在用 C 编写一个程序,我需要读入一个文件并打印出每个至少 4 个字符长的字符串。我在分配要使用的内存时遇到问题。字符串可以任意长。我试图将缓冲区分配给文件的大小,然后在最后释放它,但我显然错过了
我尝试用 C 语言编写 ls 命令,但 -R 选项有问题。 输出: /Applications/Atom.app/Contents/Resources/app/apm/node_modules/es5
我正在编写一个 shell,但在执行内存检查时遇到问题,因为 valgrind 无法正常运行。 我遇到了这样的错误(我自己杀死了它): ==19703== Memcheck, a memory err
我有这样一段代码: void *write_parallel(void *num_for_chunk) { struct rusage *sum = (struct rusage*) mall
当使用包含 200-300 个整数(以空格分隔)的输入 .txt 文件运行此代码时,我在使用 fprintf 语句的 for 循环之前收到错误。 我不确定 qsort 是否导致了此错误或为什么会发生此
我试图告诉 Websphere Liberty 我的 log4j2.xml 文件在哪里,但它不起作用。 在我的文件 jvm.options 中,我配置: -Dlog4j.configurationFi
从 websphere liberty 16 迁移到 19.0.0.1 我遇到以下异常:运行存储过程后关闭连接,出现以下异常: EJB threw an unexpected (non-declare
当对大小为 210*8 的种子数据集运行此代码时,我在预测函数中的 qsort() 行之后收到错误。它不在 qsort() 之后执行。 我不确定 qsort 是否导致了此错误或为什么会发生此错误,但如
这个问题已经有答案了: Facing an error "*** glibc detected *** free(): invalid next size (fast)" (2 个回答) 已关闭 9
我是一名优秀的程序员,十分优秀!