当前位置:  技术问答>linux和unix

新手提问c语言指针

    来源: 互联网  发布时间:2016-03-28

    本文导语:  在Linux下面实现链表的时候,遇到了以下错误,请各位指教 struct MessageElem//链表元素 { char str[STRLEN]; int   class; MessageElem *next; }; typedef MessageElem MegElm;  struct MessageList//链表 { MegElm *head; MegElm *tail; int ListLength;...

在Linux下面实现链表的时候,遇到了以下错误,请各位指教
struct MessageElem//链表元素
{
char str[STRLEN];
int   class;
MessageElem *next;
};

typedef MessageElem MegElm; 


struct MessageList//链表
{
MegElm *head;
MegElm *tail;
int ListLength; 
};

typedef MessageList MegList;

然后我使用如下:
MegList* MList;//定义一个链表指针
MegList* MList = (MegList*)malloc(sizeof(MegList));//分配地址
MegElem* MElm;//定义一个成员
MElm = (MegElm *)malloc(sizeof(MegElm));
再对其进行操作
MList->heat->next = MElm; //出错语句
就在上面这句指针赋值语句上出现了dereferencing pointer to incomplete type
请问是为什么?
我猜测如下:
不可以用->->这种双指针来进行指向一个地址.
不知道对不对,如果确实是这种原因的话,那么如果我要对上面的next进行赋值操作的话,怎么实现指向他呢?
这里不讨论这种赋值是否合理性,只是想知道这里的语法规则
请各位指教,谢谢!!!

|
首先一一列出楼主所示代码的语法错误:(具体如果解决就要根据楼主上下文的程序而定了)
1、
struct MessageElem//链表元素 

    char str[STRLEN]; 
    int  class; 
    MessageElem *next; 
}; 

2、
typedef MessageElem MegElm; 
同样的:typedef MessageList MegList; 

3、
MegList* MList;//定义一个链表指针 
MegList* MList = (MegList*)malloc(sizeof(MegList));//分配地址

4、
MegElem * MElm;//定义一个成员 

5、
MList->heat->next = MElm; //出错语句 

或许楼主的这些语法错误是在转CSDN时不小心造成的,不过还是请楼主细心一点,提问题不是一个人的事。

逻辑错误解决:
正如一楼所说,MList->head->next中head这个地址是没有初始化,不可预料的值,自然有问题了。
你可以这样:
MList->head= MElm;
MList->head->next= MElm;
就没有问题了。

|
是这样的。
MegList* MList = (MegList*)malloc(sizeof(MegList));//分配地址 
你这句只申请了MessageList的地址。

MList->heat->next = MElm; //出错语句 
这句就有错了。
如果是Mlist->head = MElm,不会有问题。

而你的MList->head->next相当于引用了MList->head所指向的地址,但是这个地址是没有初始化的,(这个指针就是野指针)。
你改变了该地址的内容,当然有问题了。

|
语法规则没问题,是逻辑问题。

在纸上画个图,用箭头代替指针来回画画就知道该怎么做了。

|

“悠悠长风”说得有道理,MList->head指向地址的没有分配内存,所以MList->head->next就会出错了。

    
 
 

您可能感兴趣的文章:

  • 新手,关于this指针
  • 新手_段错误,指针的问题,没明白!
  • linux新手提问, .sh文件的写法提问。 从.bat文件转为.sh文件。
  • 新手提问:如何在VJ中引用swing类库,
  • 新手提问:javac时出错
  • jsp新手提问
  • 新手提问!请大家回答!
  • 新手提问,给分
  • 新手提问,望各位高手赐教,谢了:)
  • 新手提问?
  • 两个网络问题,新手提问。
  • 新手提问,怎样解开zip包,linux下
  • 新手提问--1
  • 如何安装linux?新手提问
  • 新手提问 在线等待,为什么我的程序中 new 操作符出错?
  • LINUX新手提问,如何在LINUX下添加语言项?
  • 新手提问:运行一个可执行文件的问题?
  • 新手提问:有没有快捷的办法找到一个结构的定义(比如FILE, acct等)
  • ********新手提问,请各位随便看看*******
  • 新手提问:为什么看不到图形界面
  • 刚接触linux的新手的提问?
  • 新手提问
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 新手请教linux下的c语言编译!
  • 我是一个linux新手,不知道如何在linux进行C语言的编写和使用?
  • 求完整版的电子书《UNIX平台下C语言高级编程指南》,顺便问一个新手问题。
  • linux新手想请问大家你们在linux下通常用什么开发语言和工具(C多点还是C++多点还是pascal ?还有工具方面?)
  • 我是新手,,我想学习Java语言,但对它的用途还不了解,,能给介绍一下吗?谢谢!
  • 问一个新手问题:在linux下的c语言编程跟windows下有什么不同?
  • 【新手请教】关于linux下c语言编程
  • 在LINUX下怎样编写C++语言?(新手在线等待)
  • 我是新手--请问在EMACS中怎样把对一个C语言文件编译连接和运行
  • 新手小心:c语言中强符号与弱符号的使用
  • 新手如何加入开源项目 有什么好的c++,java 开源适合新手 请指点!
  • JDBC的问题,新手高手都来看看吧,说不定能帮帮我这个新手呢,谢谢!
  • 想找共同学习Linux的新手,一起学习,共同成长
  • 新手关于驱动开发的疑问
  • 新手有关linux的问题!
  • 新手:用WEB页面修改数据库中的表? iis7站长之家
  • 新手学习该用哪个版本
  • 面向新手的终端辅助工具 Clicompanion
  • 我是个新手,请各位老兄给介绍基本好书?
  • 新手请教啦~~能不能帮忙推荐几本书
  • 我是新手
  • 新手:用WEB页面修改数据库中的表?
  • Java新手上路之问题
  • 我是一名新手,请问如何学java
  • (新手)这里怎么看到300篇以外的所有文章?(不是搜索)
  • 新手求助!
  • 新手上路,怎样判断网卡是否安装成功?
  • !!新手求救!!
  • 新手在此多谢了:SUN的宠物商店
  • 新手请教,我用VI时按ESC键,总是回嘟嘟嘟嘟响,请问如何去掉!谢谢!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3