調試中出現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