调试中出现Programm received signal SIGSEGV, Segmentation fault原因及解决方法


在逐步调试时出现该错误

这个信号产生的机制是由于程序访问了没有权限访问的内存,比如内存越界,线程栈溢出等等。指针未初始化或越界,访问到了未分配地址的空间。

代码:

struct its_cpm_perceived_object_container *obj;
obj = util_calloc(1, sizeof(*obj));
obj->y_speed.confidence->value = 25;

这里使用了双重指针,但我只为第一层指针分配了动态内存,第二层指针未分配内存,导致调用第二层指针的时候访问了没有权限的内存。

多重指针同层各指针内存是相邻的,而每个指针指向的下一层地址却并不是相邻的,修改后的代码:

struct its_cpm_perceived_object_container *obj;
obj = util_calloc(1, sizeof(*obj));
obj->y_speed.confidence = util_calloc(1, sizeof(*obj->y_speed.confidence));
obj->y_speed.confidence->value = 25;
posted on 2021-08-27 17:26  只争朝夕,不负韶华!  阅读(6275)  评论(0)    收藏  举报