南城啊呀呀呀 2019-05-04 10:10 采纳率: 0%
浏览 710

用C++创建单链表,运行到p->next=(*list)->next;时显示发生访问冲突

图片说明
代码如下

#include<iostream>
using namespace std;
struct Node//创建单链表结构体
{
    int date;
    Node *next;
};
int list_headinsert(Node **list, int a[], int n);
int getlist(Node *list, int i);
int main()
{
    int *p, n;
    cout << "请输入n=";
    cin >> n;
    p = new int[n];
    for (int i = 0; i < n; i++)
    {
        cout << "请输入第" << i << "个元素=";
        cin >> p[i];
    }
    Node **list=new Node*;//创建一个空表;
    if (*list == NULL)
    {
        cout << "空间申请失败";
        return 0;
    }
    list_headinsert(list, p, n);
    for (int i = 1; i < n; i++)//按顺序导出数据元素;
        cout << getlist(*list, i) << ' ';
    return 1;
}
int list_headinsert(Node **list, int a[], int n)//头插法新建带头结点的单链表,并将数组元素导入
{
    Node *p = new Node;
    p->next = NULL;
    for (int i = n; i >1; i--)
    {
        Node*p = new Node;
        p->date = a[i];
        p->next = (*list)->next;
        (*list)->next = p;
    }
    return 1;
}
int getlist(Node *list, int i)//查找链表数据元素
{
    Node *p = list->next;
    int j = 0;
    if (p == NULL)
    {
        cout << "空表";
            return 0;
    }
    while (p&& j < i)
    {
        p = p->next;
        j++;
    }
    return p->date;
}
  • 写回答

2条回答 默认 最新

  • threenewbee 2019-05-04 10:14
    关注

    你看到 0xCDCDCDCD 了么?这是VC++很方便的一点,它的调试版的程序,当你用new/malloc分配内存的时候,它会把这块内存全部用0xCD填充。
    所以你看到这个,想都不用想就知道了,list->next这个指针没有初始化。
    你无论new或者malloc创建了Node,都要记得加上node->next = NULL

    评论

报告相同问题?

悬赏问题

  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机