gpt4 book ai didi

c - 在 C 中使用数组实现链表时出现段错误

转载 作者:行者123 更新时间:2023-11-30 15:36:05 26 4
gpt4 key购买 nike

好吧,首先,我 100% 肯定不是我的打印函数弄乱了这个程序,而是我的输出打印了“pre”,然后出现了段错误。我相信它发生在我的 create_list 函数中。我在该函数中的逻辑是,数组(链表 typedef 是 Node,所以头是 Node*,保存头的数组是 Node**)保存几个不同链表的头,并根据到索引(输入中的第一个数字)。但显然我的编程逻辑并不等于我的想法。任何帮助都会很棒,谢谢。

int main(int argc, char *argv[]){

if ( argc != 2 ) {
printf("Insufficient arguments.\n");
return 0;
}

FILE* fp = fopen(argv[1], "r");
printf("here");
while(fp == NULL){
char file[MAX_FILE_LENGTH];
printf("Unable to open file, enter a new file name: ");
scanf("%s", file);
fp = fopen(file, "r");
}
Node** array = NULL;
int length = create_list(array, fp);

fclose(fp);

printf("pre\n");

print_list(array, length);

return 0;

}
int create_list(Node** array, FILE* fp){
int length, i, index, value;

fscanf(fp, "%d\n", &length);

array = malloc(sizeof(Node*)*length); //allocate memory for the pointers

for(i = 0; i < length; i++){

array[i] = NULL; //set all the pointers to null
}

while ( !feof(fp) ) //until it reaches eof
{

fscanf(fp, "%d %d\n", &index, &value);

Node* node = new_node(value); //get the node

if ( array[index] == NULL ) { //if nothing is in there yet at the index

array[index] = node; //make whatever is at the index this node

}

else { //otherwise
Node* head = array[index]; //head equals the thing
while ( head->next != NULL ) { //go through the list until next is null
head = head->next;
}
head->next = node; //then make that null next point to the new node

}

}

return length;
}

void print_list(Node** array, int length){
int i;
for(i = 0; i < length; i++){
Node* curr = array[i]; //make the head what's stored in the array

printf(" %d ", i); //index

printf("%d ->", curr->value); //print the value

curr = curr->next; //move it
}
}

最佳答案

这里有一个问题:

Node** array = NULL; 
int length = create_list(array, fp);

参数按值传递,这意味着您将 NULL 传递给 create_list,并且当 create_list 返回时,array 仍将为 NULL。

有多种方法可以解决此问题。例如这样:

Node** array = NULL; 
int length = create_list(&array, fp);

还有:

int create_list(Node*** arrayp, FILE* fp){ 
int length, i, index, value;
Node **array;

fscanf(fp, "%d\n", &length);

array = *arrayp = malloc(sizeof(Node*)*length); //allocate memory for the pointers

关于c - 在 C 中使用数组实现链表时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22681707/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com