我對編碼相當陌生,並且正在學習一門教授C編程語言的課程。我們正在學習C語言中的數據結構,並且已經完成了一項任務,它要求我們創建一個從1到10的奇數整數的鏈表,並打印該列表。但是,我寫的代碼似乎有一些問題。那就是:創建一個奇數的鏈接列表(C)
#include <stdio.h>
#include <stdlib.h>
struct listNode {
int value;
struct listNode *nextPtr;
};
typedef struct listNode ListNode;
typedef ListNode *ListNodePtr;
void createList(ListNodePtr *sPtr);
void printList(ListNodePtr currentPtr);
int main(void) {
ListNodePtr list1Ptr;
list1Ptr = NULL;
list1Ptr->value = 1;
createList(&list1Ptr);
printf("List 1 is: ");
printList(list1Ptr);
printf("End of run.\n");
return 0;
}
void createList(ListNodePtr *sPtr) {
ListNodePtr previousPtr;
ListNodePtr newPtr;
newPtr = malloc(sizeof(ListNodePtr));
if (newPtr != NULL) {
newPtr = *sPtr;
previousPtr = NULL;
while (((*sPtr)->value) <= 10) {
previousPtr = *sPtr;
*sPtr = (*sPtr)->nextPtr;
(*sPtr)->value = previousPtr->value + 2;
}
}
else {
printf("No memory available.\n");
}
}
int isEmpty(ListNodePtr sPtr) {
return sPtr == NULL;
}
void printList(ListNodePtr currentPtr) {
if (currentPtr == NULL) {
printf("List is empty.\n\n");
}
else {
while (currentPtr != NULL) {
printf("%d ", currentPtr->value);
currentPtr = currentPtr->nextPtr;
}
printf("*\n");
}
}
所需的輸出是:(表1)爲:1 3 5 7 9 *] 我使用的環境不斷告訴我,有兩種「未處理的異常」(我不那麼確定這意味着什麼)或者只是中途停止運行。有關我如何能夠達到預期結果的任何想法?
任何其他的建議和建議的話是非常感謝。謝謝!
第一個問題是:list1Ptr = NULL; list1Ptr-> value = 1;您正試圖分配給未分配的內存。在調試器中執行代碼... –
指針只保存地址,因此您需要先分配內存並取消分配內存。請參閱malloc和free函數C –
題外話,我會告訴你一些與你的教師可能做的事情相反的事情:*不要在typedefs *中隱藏指針類型。有一個非常小的,有限數量的情況下,它是真正意義的(基於黑盒手柄的API,回調函數指針類型是我們想到的兩個)。對於其他所有情況,它會使代碼更難以閱讀,並且過分傾向於「大小錯誤」。 C程序員*希望*看到這些星號。它們就像是一個告示牌,告訴讀者:「這是一個指針。」所以不管你的教授說什麼,打破這個習慣。 – WhozCraig