[問題] 詢問 C 語言的問題 & 學習資源請教

作者: allencheng (艾倫鄭)   2023-01-01 13:46:07
開發平台(Platform): Mac
編譯器: GCC
額外使用到的函數庫(Library Used): uthash
問題(Question):
完整資訊請至 https://hackmd.io/@allencheng/rygXSYiTq
小弟在自學 C 語言,並嘗試用 C 來解 leetcode 題目
在 refactor test code 的時候,編譯沒問題,但執行時發生
segmentation fault
source:
// origin
numsSize = 4;
int *nums1;
nums1 = (int *) malloc(numsSize * sizeof(int));
nums1[0] = 2;
nums1[1] = 7;
nums1[2] = 11;
nums1[3] = 15;
// refactor
numsSize = 4;
int *nums1;
nums1 = (int *) malloc(numsSize * sizeof(int));
int data[] = {2, 7, 11, 15}; // 這行出錯
for (size_t i = 0;i < numsSize;i++)
nums1[i] = data[1];
檢查後發現是宣告 int array 的時候執行錯誤
有嘗試尋找問題的原因,但可能是觀念不足或不知道關鍵字
找不到可以解釋的地方
所以才來這詢問是什麼原因造成錯誤?
作者: stucode   2023-01-01 14:17:00
問題應該是出在沒有初始化 returnSize
作者: Richun (解放左手的OO之力)   2023-01-01 15:44:00
gcc先加個flag -Wall 把所有的warning都開出來你的returnSize是一個簡單的int能處理的事,在main裡面只需要初始化 size_t returnSize = 0; 或把size_t換成int在call function傳參數時加上&,&returnSize傳址進去。
作者: allencheng (艾倫鄭)   2023-01-01 15:58:00
您好,已補上初始化,但是變成編譯過,執行錯誤 Orz有把訊息補在 hackMD link 上,請參照,謝謝
作者: Schottky (順風相送)   2023-01-01 16:01:00
......請問returnSize做什麼用途,初始化為NULL是對的嗎
作者: nh60211as   2023-01-01 16:03:00
初始化是要malloc,你的twoSum裡面是直接assign value,如果returnSize是NULL,當然會直接segmentation fault。不然就是像Richun講的在main的returnSize改成int,然後傳address 進twoSum
作者: allencheng (艾倫鄭)   2023-01-01 16:12:00
問題已解決,解決內容跟 git commit 已更新在 hackMD謝謝大家的協助,搞懂問題出在哪了,會再補上解說
作者: Richun (解放左手的OO之力)   2023-01-01 16:21:00
在pointer跟address那邊你應該還很不熟,還沒搞懂為什麼function的宣告returnSize是用int*型態(應該size_t*更好)
作者: allencheng (艾倫鄭)   2023-01-01 16:27:00
參數型態的部分是因為 leetcode 裡面就是這樣宣告的,我是先在 LC 測過,再回過頭嘗試寫測試練習 C 語言的
作者: Dracarys (MayShowGunMore)   2023-01-01 18:47:00
作者: Lipraxde (Lipraxde)   2023-01-03 12:25:00
程式風格百百種,就像口音一樣,只要參與開發的時候能適應就好,更重要的事是邏輯層面的,要條理分明、精簡而且完整
作者: dmeiki (熊麻吉)   2023-01-04 16:58:00
可以看 6.1810,看完會 c 跟作業系統
作者: allencheng (艾倫鄭)   2023-01-04 18:14:00
感謝推薦!我會花點時間好好研究的
作者: dalbuhr (殘月之肅)   2023-01-19 11:17:00
讚喔
作者: hahalala (創業&邁向另ㄧ個高峰)   2023-02-01 20:00:00
請問 6.1810 這是?
作者: cloki (夜雲天)   2023-02-02 06:51:00
關鍵字都有了就直接google吧...

Links booklink

Contact Us: admin [ a t ] ucptt.com