使用c读取bmp文件时遇到fclose崩溃问题,调试很久,不得其解。后来发现是因为fread数据块时,buf内存空间分配过小,虽然使用printf打印buf中的内容是正确的,但是此时已经出现指针越界的情况了。这种情况下,fclose会崩溃
/mnt/diskc/db/app/bin/mysqld: double free or corruption (out): 0x00007f09cc00c900 ***
======= Backtrace: =========
/lib64/libc.so.6...
确认编译器是否一致, 调用代码编译器和第三方静态库的编译器不一致, 可能会
导致
内存布局不同。
确认引用的系统头文件是否一致,有些头文件包含了声明和定义,实现不同会
导致
问题。
确认编译选项是否一致,有很多编译选项会
导致
内存偏移量改变,如果第三方的代码在头文件实现,且调用方和第三方代码编译选项不同,会
导致
调用方调用该内联函数的时候,按照自己这边编译选项分析出来的偏移量找第三方的成员变量的位置,从而
导致
crash
。
.........
要求如下:
We need to remove the non-ASCII bytes from files.
Write a C program, leave_only_ascii.c, which takes one argument, a filename.
leave_only_ascii.c should remove all non-ASCII bytes from the file.
After it is run the file should contain only a ASCII by
调用
fclose
函数时,如果文件指针参数为 NULL,则会产生 undefined behavior(未定义行为),可能会
导致
程序
崩溃
或出现其他奇怪的问题。因此,应该在调用
fclose
之前检查文件指针是否为 NULL。例如:
FILE *fp = fopen("file.txt", "r");
if (fp != NULL) {
// 文件打开成功
// ...
fclose
(fp); // 注意要在使用完文件后关闭
} else {
// 文件打开失败
// ...