malloc-指针,简单链表输入输出,编译器

问题描述

指针,简单链表输入输出,编译器

求解这个简单的链表,为什么会出错,而且运行过后编译器不能调试了求解

 #include<stdio.h>
#include<stdlib.h>
struct node
{
    int date;
    node *next;
};

int main()
{
    int n;
    scanf("%d",&n);
    node *head,*q,*tail;
    node p;
    q = &p;
    int a;
    head = NULL;
    for(int i = 0;i<n;i++)
    {
        scanf("%d",&a);
        q->date = a;
        if(head==NULL)
        {
            head = q;
        }
        else
        {
            tail = q;
        }
        q = q->next;
        q = (node*)malloc(sizeof(node));
    }
    free(q);
    tail->next=NULL;
    node *t = head;
    while(t->next!=NULL)
    {
        printf("%d
",t->date);
        t = t->next;
    }
    return 0;
}

解决方案

不好意思,我刚想了一下,有些地方说错了,你在用之前要先申请内存,把节点赋值,然后再把链挂上,根据你的思想的话,可以这样,tail-》next=q然后再让tail=q就好了,这样就完美了!你的思路其实还挺好的,如果我要写的话可能就用我刚说的别的指针当作tail了

解决方案二:

链表的输入输出删除

解决方案三:

首先定义的时候应该是struct node *q;以此类推
然后你都没申请p的空间你就拿q指向
其次在你赋值给链表节点的时候,p=p-》next恐怕不对,因为你下面语句申请的空间在堆上,你先让q指向NULL又让它指向堆是神马意思……

我感觉你可以用一个中间变量来跑,比如用tmp=q-》next然后让q=temp这样赋值好一些

时间: 2024-08-21 10:17:00

malloc-指针,简单链表输入输出,编译器的相关文章

指针-简单链表类的DELETE函数

问题描述 简单链表类的DELETE函数 这是头文件: #include using namespace std; template class KNOTE { public: A data; KNOTE * next; KNOTE(A data,KNOTE* next); virtual ~KNOTE(); }; template KNOTE::KNOTE(A data,KNOTE* next) { this->data=data; this->next=next; } template KN

c 指针 文件输入输出-C语言fprintf和fscanf问题

问题描述 C语言fprintf和fscanf问题 这段代码是为了打开一个文件,用fprintf输入字符串,在用fscanf返回,最后看fscanf的返回值.但是这段程序一运行就出错,猜测是指针访问问题,但是不明白原理.请大家帮忙看下,谢谢! 出错提醒是:0xCDCDCDCD 处有未经处理的异常(在 ConsoleApplication1.exe 中): 0xC0000005: 执行位置 0xCDCDCDCD 时发生访问冲突. 代码如下 #include #include int main(voi

C指针的实质

最近对C/C++指针特别感冒,就详细的研究了下 看下面的定义: char a[] = "Hello World"; char *p = "Hello World"; 1.什么是地址 地址本身就是一种基本数据类型,它跟整数,浮点数,字符等基本类型是一样的.指针不是类型,真正的类型是地址,指针只不过是存储地址这种数据类型的变量. 打个比方,对于 int i=10: 10是整数,而i是存储整数的变量,指针就好比这个i,地址就好比那个10.指针能够进行加减法,原因并不是因为

C/C++数组和指针详解

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:wdzxl198@163.com    /*  转载请注明本文出处: *  http://blog.csdn.net/wdzxl198/article/details/9087497 /***********************

成员函数指针与高性能的C++委托 (Member Function Pointers and the Fastest Possible C++ Delegates)

标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做"闭包(closure)"或"委托(delegate)")在一些语言中已经证明了它宝贵的价值.在Delphi (Object Pascal)中,面向对象的函数指针是Borland可视化组建库(VCL,Visual Component Library)的基础.而在目前,C#使"委托"的概念日趋流行,这也正显示出C#这种语言的成功.在很多应用程序中,&qu

vs2012-C++ void 符号常量指针

问题描述 C++ void 符号常量指针 初学 C++ 编译器(vs2012)上有这样一段代码无法编译:typedef void far * XMSDRIVER; 在 * 处提示错误 "应输入:" 关于 far 的定义如下: #ifndef FAR #ifdef NEED_FAR_POINTERS #define FAR far #else #define FAR #endif #endif 解决方案 typedef void* XMSDRIVER; 解决方案二: typedef vo

后台开发:核心技术与应用实践1.4 指针

1.4 指针 1.?指针的概念 为了理解什么是指针,必须先弄清楚数据在内存中是如何存储的,又是如何读取的.如果在程序中定义了一个变量,在编译时就给这个变量分配内存单元.系统根据程序中定义的变量类型,来分配一定长度的空间.例如,C++编译系统在32位机器上为整型变量分配4Byte,为单精度浮点型变量分配4Byte,为字符型变量分配1Byte.内存区的每一个字节有一个编号,这个编号就是地址,如表1-1所示. 表1-1 用户数据.变量.地址直接的对应关系 地址     用户数据     变量名 -  

C++多重继承下的指针类型转换

在C++中,指针的类型转换是经常发生的事情,比如将派生类指针转换为基类指针,将基类指针转换为派生类指针.指针的本质其实就是一个整数,用以记录进程虚拟内存空间中的地址编号,而指针的类型决定了编译器对其指向的内存空间的解释方式. 基于上面的理解,我们似乎可以得出一个结论,C++中对指针进行类型转换,不会改变指针的值,只会改变指针的类型(即改变编译器对该指针指向内存的解释方式),但是这个结论在C++多重继承下是 不成立的. 看下面一段代码: 1 #include <iostream> 2 using

C++中this指针的用法及介绍_C 语言

this指针只能在一个类的成员函数中调用,它表示当前对象的地址.下面是一个例子:   复制代码 代码如下:      void Date::setMonth( int mn )     {      month = mn; // 这三句是等价的      this->month = mn;      (*this).month = mn;     }   1. this只能在成员函数中使用.全局函数,静态函数都不能使用this.实际上,成员函数默认第一个参数为T* const register