近期项目中错误总结
程序员文章站
2022-05-30 15:12:14
...
- strcmp/strncmp函数使用错误。期望相等则执行block,结果却用了
if (strcmp(string1, string2))
{
do something;
}
避免方法:
尽量使用 if (strcmp(string1, string2) == 0) 这样显式使用比较等式。容易理解编码期望,也容易发现编码错误。
- 结构指针使用前没有判断是否为NULL,这估计是C开发中造成异常最多的问题。
if (structPtr->member)
{
do something;
}
避免方法:
每次使用 -> 符号,都要确保左边指针是存在的。养成看到 -> 符号立马就check 指针是否OK的好习惯。
- 使用已释放的内存中list指针去获取next,尤其是在for循环中,很具迷惑性
for (structPtr = headPtr->next; structPtr != headPtr; structPtr = structPtr->next)
{
do something;
free(structPtr);
}
如代码所示,如果代码体太大,还挺难看出这个问题。
避免方法:
如果代码体中会释放结构,那么在释放之前先获取到相应指针。示例如下:
next = headPtr->next;
while (next != headPtr)
{
structPtr = next;
nextPtr = next->next;
do something;
free(structPtr);
}
推荐阅读