2016-11-11 84 views
-1

在這個程序中,我必須創建一個指針系統,在讀取較大輸入的80個字符後,將提供一個pointer-to-pointer-to-character操作。然後將結果發送到一個函數,以確定總輸入中的單詞數量和它們包含的平均字母數量。我的問題是,我不知道如何創建指針系統,而不會產生exc_bad_access警告。此外,我無法找到適合我需求的malloc和free組合。任何幫助,這將不勝感激。使用指針發送數組的指針C項目

inputPtr = (char*)malloc(81 * sizeof(char)); 

while (fgets(wordy, 81, stdin) != NULL) { 
    numChar = strlen(wordy); 

    inputPtr = wordy; 
    for (i = 0; i < groupRange; ++i) { 
     sentPtr[i] = &inputPtr; 
    } 
    if (numChar == 80) { 
     groupRange++; 
    } 
    free(inputPtr); 
    printwords(*sentPtr, numChar); 
} 
+0

你似乎試圖在這裏做字符串複製:'inputPtr =羅西;',我想。在C中,字符串不能像那樣工作。在創建「指針系統」之前,您可能需要回過頭幾步並瞭解C字符串,無論您的意思如何。但是你應該考慮的一件事是,爲什麼你只有一次「malloc」,但是在循環中「free」? – hyde

+1

您在第一次迭代時泄漏了爲'inputPtr'分配的內存。我們不知道「羅嗦」是什麼。瘋狂的猜測:這不是你的真實代碼? – WhozCraig

+1

停止「試圖找到malloc和free的組合,這將減輕我的這一點」,因爲猜測不會奏效。請嘗試從邏輯上理解它。如果你還沒弄明白,那麼你可能需要了解更多關於指針,字符串或'malloc'的信息,那很好。 – immibis

回答

1

讓我們來仔細看您的代碼這三行:

inputPtr = (char*)malloc(81 * sizeof(char)); 
... 
inputPtr = wordy; 
... 
free(inputPtr); 

第一分配內存,並且指針指向的內存分配給變量inputPtr

第二行重新分配inputPtr因此它不再指向您分配的內存。您將失去該內存,並有內存泄漏

最後的最後一行,在那裏你嘗試釋放什麼inputPtr指向,並且正是它指向我不知道,但它可能不是您與malloc分配的內存做。這導致未定義的行爲

確切地說,如何解決你的問題我不確定,但一個好的開始是不動態分配內存,然後當然不會調用free