c++ - C语言中取出的数据是一个很大的负数

查看:665
本文介绍了c++ - C语言中取出的数据是一个很大的负数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

1.我写了一个链表,在测试初始化的功能,发现输入的数据域是-842150451
有点像内存溢出的感觉,可能是取数据取得有问题。
2.代码如下

#include <iostream>
using namespace std;

typedef int ElemType;
typedef struct LNode {
    ElemType data;
    struct LNode *next;
}LNode, * LinkList;

//逆位序建立单链表
int CreateList_L(LinkList &L, int n) {
    //给头结点分配空间
    L = (LinkList)malloc(sizeof(LNode));
    L->next = NULL;

    //建立一个带头结点的单链表
    for (int i = n; i > 0; i--) {
        LinkList p;
        p = (LinkList)malloc(sizeof(LNode));
        p->next = L->next;
        L->next = p;
    }
    return 0;
}
int ListInsert(LinkList &L, int i, ElemType e) {
    LinkList p;
    p = L;
    int j = 0;

    //寻找第i-1个节点
    while (p&&j<i-1)
    {
        p = p->next;
        ++j;
    }
    if (!p || j > i - 1) {
        return -1;
    }
    //生成新节点
    LinkList s;
    s = (LinkList)malloc(sizeof(LNode));
    s->data = e;
    s->next = p->next;
    p->next = s;
    return 0;
}

int main()
{
    LinkList L;
    CreateList_L(L, 3);
    cout << "L 的地址 " << &L << endl;
    for (int i = 0; i < 3; i++) {
        LinkList q;
        q = L;
        int data;
        cout << "请输入数据" << endl;
        cin >> data;
        q->data = data;
        q = q->next;
    }
    //ListInsert(L, 1, 2);
    //ListInsert(L, 2, 9);
    LinkList p;
    p = L;
    while (p->next != NULL) {
        p = p->next;
        cout << "输出p的data " << p->data << endl;
    }
    system("pause");
    return 0;
}

3.运行结果

4.经常查看一些临时变量会看到类似的情况,以及我产生这种问题的原因。提前感谢帮助。

解决方案

基本逻辑错误

LinkList q; // 这两句需要在循环外吧?
q = L;
for (int i = 0; i < 3; i++) {
    q = q->next; // 你的链表有个所谓的头节点,所以第一个节点没用吧?
    int data;
    cout << "请输入数据" << endl;
    cin >> data;
    q->data = data;
}

这篇关于c++ - C语言中取出的数据是一个很大的负数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆