[問題] 使用雙重指標的題目有問題

作者: mouwat (QQ)   2020-09-02 10:47:23
不好意思又來麻煩大家指點
題目是codewar使用雙重指標的問題
使用C語言
https://www.codewars.com/kata/534d2f5b5371ecf8d2000a08/train/c
我查詢雙重指標的使用方法後試著寫了卻出不來結果
參考內容
https://imgur.com/B2gM9rm.jpg
寫了以下的code
https://ideone.com/sQjKpG
顯示結果
https://imgur.com/kfjG0FH.jpg
之前發生類似的問題通常是宣告範圍有問題...
有請寫C++朋友幫看一下 但他說不太熟這部分
煩請指點迷津
作者: Lipraxde (Lipraxde)   2020-09-02 11:24:00
你看看人家 tmp malloc 寫在哪?你寫在哪?啊...我看錯惹...我看題目的意思應該是要你幫每個 row 都 allocate 一塊空間,不過你是 allocate 一整塊。所以在它 free memory 的階段會出錯
作者: sarafciel (Cattuz)   2020-09-02 12:07:00
因為他test的部分free是每條row分開free的你直接alloc一整塊出來就會變成double free
作者: Lipraxde (Lipraxde)   2020-09-02 12:29:00
題目的 note 意思就是要你這樣 allocate memory。並不是 double free。第一個 row 以外的 rows 指到的是tmp 加一個偏移量的位置,free 的時候由於這些 pointers 不是 allocate 出來的,所以會出現 invalid pointer的錯誤
作者: sarafciel (Cattuz)   2020-09-02 13:11:00
啊對,這個不算double free,感謝指正XD
作者: loveme00835 (髮箍)   2020-09-02 15:06:00
需要加的不是 C 語言malloc()/calloc() 完以後會回傳的指標, 而這些指標就是需要給 free() 的引數, 所以呼叫次數先要對得上才行, 這是大原則.
作者: Lipraxde (Lipraxde)   2020-09-02 17:56:00
你可以自己寫幾隻程式後用 valgrind 跑,valgrind 會告訴哪邊對記憶體的操作有問題
作者: loveme00835 (髮箍)   2020-09-03 05:37:00
為什麼你在呼叫函式以前不先看它的說明, 而是靠別人寫的程式碼來猜用途?
作者: reemir   2020-09-22 10:06:00
什麼叫做雙重指標?有這種東西嗎?

Links booklink

Contact Us: admin [ a t ] ucptt.com