段错误问题总结

匿名 (未验证) 提交于 2019-12-03 00:30:01

1. 对const修饰的变量赋值

定义如下一个const修饰的数组,并对该数组memset

const char a[10]; memset(a, 0, sizeof(a));

2. free static修饰的变量

代码举例如下:

static char *ptr = NULL; ptr = (char*)malloc(10); free(ptr); ptr = NULL;

3. 函数参数未判空

举例如下:

void func(void *name) {     strcpy(name, "andy"); }

为安全起见, 应该要判断 name 是否空指针。代码实现如下:

void func(void *name) {     if (NULL==name)     {         return ;     }      strcpy(name, "hello"); }

4. 函数返回值未判空

如下代码,如果 content中不包含“hello”,则strstr返回NULL,此时对startIndex操作就会出段错误。

startIndex = strstr(content,"hello"); strcpy(newValue, startIndex);

比较安全的处理为:

startIndex = strstr(content,"hello"); if (startIndex) {     strcpy(newValue, startIndex); }

5. 使用不安全的库函数

strcat, strcpy, printf等都是不安全的库函数。比如:

char a[5]; strcpy(a, "hello word");

6. 野指针

错误实现如下:

void func1(char *ptr) {     free(ptr);     ptr = NULL; }  void func2() {     char *ptr = NULL;          ptr = malloc(10);     if (NULL!=ptr)     {         func1(ptr);                  strcpy(ptr, "hello");     } }

7. double free

错误实现如下:

void func1(char *ptr) {     ....     free(ptr);     ptr = NULL; }  void func2() {     char *ptr = NULL;          ptr = malloc(10);     if (NULL!=ptr)     {         func1(ptr);                  free(ptr);         ptr = NULL;     } }

8. 局部变量未赋初始值

char *ptr;  if (ptr) {     strcpy(ptr, "hello"); }
未完待续。。。


文章来源: 段错误问题总结
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!