【问题标题】:C++ problematic function, Array to List [closed]C ++有问题的函数,数组到列表[关闭]
【发布时间】:2017-05-24 20:08:47
【问题描述】:

我有编程课上的这段代码:

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;
    }
}  

我调用它是为了将 Array 元素传输到 List:

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);

我遇到“分段错误”——程序以退出代码 139 结束。出了什么问题,如何解决?

【问题讨论】:

  • 欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
  • 您的列表 (first) 是 NULL,而您从未为其分配任何内存
  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 edit 您的问题包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
  • 您的函数希望所有列表节点都已分配。但是您将一个空列表传递给函数。

标签: c++ arrays list move tolist


【解决方案1】:

看起来您取消引用 NULL 指针:

main:

List *first = NULL;

ToList:

List *p = first; // first = NULL
...
p->x = arr[i]

所以,你需要先分配列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2021-07-19
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多