[問題] 堆疊已損毀

看板C_and_CPP (C/C++)作者 (mario86123)時間8年前 (2017/05/13 09:30), 編輯推噓1(1011)
留言12則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) vs 2015 問題(Question): 這個程式是要把餵入的資料轉成二元樹存起來 我程式寫到一個段落偵錯的時候 發現第28行 第一次malloc是成功的 但第二次malloc就失敗了 它顯示堆積已損毀 想請問一下程式是哪裡出錯了呢? 餵入的資料(Input): (-,(/,(*,16,(+,24,13)),9),10) 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/e35UfNCP -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.236.64 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1494639040.A.D21.html

05/13 11:27, , 1F
line 33: root->data[1] = '/0';
05/13 11:27, 1F

05/13 11:28, , 2F
heap壞掉,就要檢查對malloc的指標寫入的操作
05/13 11:28, 2F

05/13 11:30, , 3F
data有[3],operatorr有[5],operatorr沒有初始化
05/13 11:30, 3F

05/13 11:32, , 4F
所以你的strcpy應該有蠻大機會複製超過3個byte
05/13 11:32, 4F

05/13 12:12, , 5F
26行沒有歸零 32行有機會複製到 垃圾
05/13 12:12, 5F

05/13 12:13, , 6F
不過主因是31不正確的操作(沒補結束符)
05/13 12:13, 6F

05/13 12:13, , 7F
然後就是樓上說的複製超過
05/13 12:13, 7F

05/13 12:14, , 8F
71行 嘗試把一個 長度超過3的複製進去
05/13 12:14, 8F

05/13 12:18, , 9F
33行操作是錯誤的 直接 = 0 就好
05/13 12:18, 9F

05/14 05:01, , 10F
標題堆疊,內文堆積
05/14 05:01, 10F

05/14 08:28, , 11F
成功了 感謝~
05/14 08:28, 11F

05/16 22:49, , 12F
堆疊損毀跟堆積損毀是不一樣的東西啊啊啊
05/16 22:49, 12F
文章代碼(AID): #1P5c70qX (C_and_CPP)
文章代碼(AID): #1P5c70qX (C_and_CPP)