最近在调项目的代码,经常debug一调就一下午
目前还是在CLion中运行的,希望在Linux上跑也能顺利
记录一下好不容易找出来的bug
strcat/strcpy 破坏内存
项目里构造字符串用到很多strcat/strcpy
有时候debug发现
对一个变量的修改会破坏其他内存变量
主要是char *类型的字符串
错误原因
:
char * = "string"
的char *类型是定长不可修改的字符串,初始化时申请的空间比较小,strcat之后内存覆盖比较严重
解决方法
:用 char[N] 代替 char *,初始化时申请的空间变大,不会覆盖(但是需要静态初始化,可能存在内存浪费)
readdir函数 ECX_BAD_ACCESS
第一次用到readdir函数做目录下的文件轮询
感谢这篇博文:https://www.cnblogs.com/fnlingnzb-learner/p/6472391.html
while ((ptr = readdir(dir)) != NULL) {
//查找目录下的所有文件
memset(filename, 0, sizeof(filename));
stat(ptr->d_name, &st);
strcpy(filename, ptr->d_name);
printf("file:%s\n", filename);
这个循环经常没有遍历目录下所有文件就返回一个ECX_BAD_ACCESS的异常
错误原因
:1. fopen() 后没有fclose()
2. 同第一个bug,字符串内存覆盖导致路径错误
3. 本来用了IS_DIR判断文件类型,但是没搞清楚具体的方式,某些文件不符合条件就被忽略了
解决方法
:补上fclose() ,删去文件类型判断(如果弄清楚了还是需要判断一下),如第一个bug修改即可
fprintf函数写不进去
写上报文件的时候用了fprintf(),但是写完文件里还是一片空白
错误原因
:文件路径错误,根本就找不到文件
解决方法
:fopen() 时需要
完整的路径
Linux结构体定义报错
错误原因
:Linux的struct不能又定义又赋值
解决方法
:结构体定义时不要赋值,在创建struct对象时手工初始化
Linux下找不到<zconf.h>