为什么我的代码在涉及指针时停止运行?

问题描述 投票:0回答:1

我需要做一个简单的链接列表程序,但我的代码就停止运行了。下面是代码,第一个是主.cpp文件,第二个是定义问题函数的头。代码在分配 "new_"指针属性(用箭头标记)时停止。这个函数,正如它的名字一样,需要从一个数组中生成一个链接列表,并返回该列表的头部。我使用dev c++进行编译,他没有抛出任何错误或警告。

<main.cpp>

#include<stdio.h>
#include"LinkedList2.h"

int main(){
    node *head;

    int A[] = {2,8,12,9,7};
    int n = sizeof(A) / sizeof(A[0]);

    head = CreateListFromArray(A, n);

    PrintList(head);

    return 0;
}
<LinkedList2.h>

#include<stdio.h>

typedef struct node_{
    int x;
    struct node_ *next;
}node;


node* CreateListFromArray(int A[], int n){
    node *head = NULL, *tmp = head, *new_;

    for(int i = 0; i < n; i++){
        new_->next = NULL;                 //  <------
        new_->x = A[I];                    //  <------
        tmp->next = new_;
        tmp = tmp->next;
    }
    return head;
}

void PrintList(node *head){
    for(node *tmp = head; tmp != NULL; tmp = tmp->next) printf("%d ", tmp->x);
}

c++ arrays pointers linked-list
1个回答
2
投票

你需要为每个新节点分配内存

node* CreateListFromArray(int A[], int n){
    node *head = NULL, *tmp = head;

    for(int i = 0; i < n; i++){
        node *new_ = new node():
        new_->next = NULL;                 //  <------
        new_->x = A[I];                    //  <------
        tmp->next = new_;
        tmp = tmp->next;
    }
    return head;
}

你也没有一个有效的头部指针,我让你自己去解决。

注意在C++中,你不再需要typedef了,你还得把A[I]改成A[i],因为I不存在。


1
投票

你还得把A[I]改成A[i],因为I并不存在。

© www.soinside.com 2019 - 2024. All rights reserved.