调试中出现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;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM