第二个printf无法正常工作,需要帮​​助。 (C朗)

时间:2013-11-14 09:11:21

标签: c linked-list

这是什么问题?它打印第一个printf,但不打印下一个语句 帮助赞赏。

代码:

#include<stdio.h> 
#include<stdlib.h>

struct node
{
  int Data;
  struct node *Link;
};

//close struct
void insertAtEnd(struct node *Itcstd, int iData)
{
  while (Itcstd->Link != NULL )
    Itcstd = Itcstd->Link;

  Itcstd->Link = (struct node*) malloc(sizeof(struct node));
  Itcstd->Link->Link = NULL;
  Itcstd->Link->Data = iData;
} //close insertAtEnd

int main()
{
  struct node *EHead;

  EHead = (struct node*) malloc(sizeof(struct node));
  EHead->Link = NULL;
  EHead->Data = 4;

  printf("EHead link: %p Ehead Data: %d\n", EHead->Link, EHead->Data);
  insertAtEnd(EHead, 10);
  printf("EHead link: %p Ehead Data: %d\n", EHead->Link, EHead->Data);

  return 0;
} //close main

3 个答案:

答案 0 :(得分:2)

实际上这是一个很好的代码,它对我很有用。 (我可以看到两行。)

答案 1 :(得分:1)

代码运行正常,没有任何内存问题。

唯一需要提及的是printf()指针(%p)的转换说明符仅为void *定义。告诉编译器迂腐(gcc选项-pedantic)它会通知你这个。

所以这个

printf("EHead link: %p Ehead Data: %d\n", EHead->Link, EHead->Data);

应为此

printf("EHead link: %p Ehead Data: %d\n", (void *) EHead->Link, EHead->Data);

这是顺便说一句,是C中罕见的情况之一,无法避免施法。

答案 2 :(得分:1)

代码很优雅,对我来说工作正常我在windows上检查过(codeblocks MinGW gcc 4.7,turbo c ++) linux(gcc 4.8.1),它完美无缺。 你在哪个环境使用?