我的代碼編譯正確,但在insertLast函數的4個循環後,程序崩潰。有人能幫我理解爲什麼嗎?鏈接列表 - 程序在添加節點時崩潰
我之前發佈了一個類似的問題,這幫助我識別了其他問題。我已經重寫了這個函數,但是我仍然遇到同樣的問題。下面我的代碼:
#include <stdio.h>
#include <stdlib.h>
#include "LinkedList.h"
int main (int argc, char* argv[])
{
int ii;
{
FILE* f; /*open file for reading to get ints*/
f = fopen(argv[1], "r");
if(f==NULL)
{
printf("Error: could not open file");
return 0;
}
LinkedList* canQueue=createList();
for(ii = 0; ii < 10; ii++)
{
TinCan* tempCan= (TinCan*) malloc(sizeof(TinCan));
fscanf(f, " WGT_%d", &tempCan[ii].weight);
insertLast(canQueue, tempCan); /*Inserts the new can into linked list*/
}
testLinkedList(canQueue);
}
return 0;
}
LinkedList.h
typedef struct TinCan
{
int weight;
} TinCan;
typedef struct Node
{
TinCan* data;
struct Node *next;
} Node;
typedef struct LinkedList
{
Node *head;
} LinkedList;
void insertLast(LinkedList* list, TinCan *newData);
LinkedList* createList();
void testLinkedList(LinkedList* list);
LinkedList.c
#include <stdio.h>
#include <stdlib.h>
#include "LinkedList.h"
LinkedList* createList() /*creates empty linked list*/
{
LinkedList* myList;
myList = (LinkedList*)malloc(sizeof(LinkedList));
myList->head = NULL;
return myList;
}
void insertLast(LinkedList* list, TinCan *newData)
{
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = newData;
newNode->next = NULL;
if(list->head==NULL)
{
Node* current = (Node*)malloc(sizeof(Node));
list->head=newNode;
current=newNode;
}
else
{
Node* temp = (Node*)malloc(sizeof(Node));
temp = list->head;
while(temp->next!=NULL)
{
temp = temp->next;
}
temp->next = newNode;
}
printf("Looped\n");
}
void testLinkedList(LinkedList* list)
{
Node* current;
current = list->head;
while(current != NULL)
{
printf("Weight = %d\n", current->data->weight);
current = current->next;
}
}
只看你的代碼很快 - 當你插入()到一個空列表時,你malloc'ing兩個節點結構?這不是明顯的原因。 – DarenW 2013-05-03 05:10:16