C++问题函数,数组到列表

C++问题函数,数组到列表,c++,arrays,list,move,tolist,C++,Arrays,List,Move,Tolist,我在编程课上有以下代码: void ToList(List *first, int *arr, int n) { List *p = first; for(int i=0; i<n; i++) { p->x = arr[i]; if (p->next != NULL) p = p->next; } } 我遇到了一个分段错误-程序以退出代码139结束。有什么问题以及如何修复?看起来您取消了对空指针的引用: 大体上:

我在编程课上有以下代码:

void ToList(List *first, int *arr, int n) {
    List *p = first;
    for(int i=0; i<n; i++) {
       p->x = arr[i];
       if (p->next != NULL) p = p->next;
    }
}  

我遇到了一个分段错误-程序以退出代码139结束。有什么问题以及如何修复?

看起来您取消了对空指针的引用:

大体上:

在ToList中:


因此,您需要首先分配列表。

欢迎使用堆栈溢出。请花点时间阅读并参考您可以在此处询问的内容和方式。您的第一个列表为空,并且您从未为其分配任何内存。解决此类问题的正确工具是调试器。在询问堆栈溢出之前,应该逐行检查代码。如需更多帮助,请阅读。至少,您应该在问题中包含一个重现问题的示例,以及您在调试器中所做的观察。您的函数要求已分配所有列表节点。但是您正在向函数传递一个空列表。
int main() {

const int N = 10;
int m[N] = {5, 8, 1, 7, 2, 6, 9, 4, 0, 3};

List *first = NULL;

ToList(first, m, N);
PrintList(first);
List *first = NULL;
List *p = first; // first = NULL
...
p->x = arr[i]