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

求助:还向各位大哥请教一问题,编译成功了,可是运行时提示:段错误 ,谢谢!

    来源: 互联网  发布时间:2015-12-05

    本文导语:  #include   #include   #include   typedef struct stringdata  {  char *string;  struct stringdata *next;  } mydata;  void writel(mydata *start);  int main()  {  mydata *start;  start->string="starts";  writel(start);  return 1;  }  void writel(mydata...

#include  
#include  
#include  

typedef struct stringdata 

char *string; 
struct stringdata *next; 
} mydata; 

void writel(mydata *start); 

int main() 

mydata *start; 
start->string="starts"; 
writel(start); 
return 1; 



void writel(mydata *start) 

mydata *new; 
mydata *cur; 

char input[100]; 

cur=start; 
while(1) 

fgets(input,sizeof(input),stdin); 
if (strcmp(input,"9")) 

printf("write quit /n"); 
break; 

else 

new=malloc(sizeof(mydata)); 
//new=cur->next; 
cur->next=new; 
new->string=input; 
cur=new; 
free(new); 





编译没有错误,可是不管我在终端是敲入 9 还是别的, 
都是提示: 
段错误 


大哥,我这又是错误在哪里呢? 

谢谢! 

|
楼主的程序问题很多啊。
指针还的好好学习啊!


#include  
#include  
#include  

typedef struct stringdata 

char *string; 
struct stringdata *next; 
} mydata; 

mydata *writel(mydata *start); 

int main() 

mydata *start; 
start = (mydata *)malloc(sizeof(mydata));
start->string = (char *)malloc(sizeof(char) *8);
strcpy(start->string, "starts"); 
writel(start); 
return 1; 


mydata *writel(mydata *start) 

mydata *newp; 
mydata *cur = start; 

char input[100]; 
cur=start; 
while(1) 
{
fflush(stdin);
fgets(input,sizeof(input),stdin); 
input[strlen(input) - 1] = '';
if (strcmp(input,"9") == 0) 

printf("write quitn"); 
break; 

else 

newp = (mydata *)malloc(sizeof(mydata)); 
newp->string = (char *)malloc(sizeof(char) * (strlen(input)+1)); 
strncpy(newp->string, input, strlen(input)+1);
cur->next = newp; 
cur = newp; 
}
}
return start; 



gcc下可以运行了。
建议楼主好好看看书上的例子,指针到底怎么操作。

|
1)printf("write quit /n");  ===>printf("write quit n"); 
2)在linux系统中fgets有时候会默认在字符串后面加一个n。即,当你输入“9”,其实是"9n",所以要做处理。
3)start->string="starts"; 
string是一个char *指针,直接赋值是不安全的,有些编译器过不了。
4)
new=malloc(sizeof(mydata)); 
//new=cur->next; 
cur->next=new; 
new->string=input; 
cur=new; 
free(new); 
这一段代码就更看不懂了,你分配了一个结点,但马上又free,这样能构造一个链表吗?
5)
char input[100]; 
.
.
.
new->string=input; 
你在一个函数内申明的数组,当你函数返回时,该变量会从堆栈释放出来,所以
new->string指针得到的肯定是一个错误的指针,或者称为“野指针”

鉴于上面的问题,我建议你将结构体申明为:
typedef struct stringdata
{
    char string[MAX_LEN];
    struct stringdata *next;
}

在对然后避免用“=”赋值给string,用strcpy();
今天心情不好,你看看:
#include 
#include 
#include 

#define MAX_LEN 20
typedef struct stringdata
{
    char string[MAX_LEN];
    struct stringdata *next;
}mydata;

void writel (mydata * start);
void printl (mydata *start);
void dell (mydata *start);

int
main ()
{
    mydata *start;
    start = (mydata *)malloc(sizeof(mydata));
    strcpy(start->string , "starts");
    start->next = NULL;
    writel (start);
    printl (start);
    dell (start);
    start = NULL;
    printl (start);
    return 1;
}


void
writel (mydata * start)
{
    mydata *new;

    char input[100];
 while (1)
      {
          fgets (input, sizeof (input), stdin);
          input[strlen(input)-1] = '';
          if (strcmp (input, "9") == 0)
            {
                printf ("write quit n");
                break;
            }
          else
            {
                new = (mydata *)malloc (sizeof (mydata));
                strcpy(new->string, input);
                new->next = NULL;
                start->next = new;
                start = start->next;
            }
      }
}

void printl (mydata *start)
{
        while(start != NULL)
        {
                printf("%sn", start->string);
                start = start->next;
        }
}

void dell (mydata *start)
{
        mydata *p;
        p = start;
        while (p != NULL)
        {
                p = p->next;  //move next
                //free the before node
                free(start);
                start = NULL;
                //point to new node
                start = p;
        }
}


    
 
 

您可能感兴趣的文章:

  • rh8编译内核出错!求助!
  • 系统FC10 我想装tar.gz的源码文件。但在编译是总是出错。求助
  • 求助 有人能给个编译好的,可直接运行的 发包测试软件吗
  • redhat9.0编译的新核心不能启动,求助!
  • ubuntu 10.10环境下的交叉编译求助
  • 求助:关于gcc的预编译头
  • 新手求助!编译libmad包时的错误!
  • 求助:编译的头文件问题
  • gcc编译时出错,gcc: installation problem, cannot exec `as': 没有那个文件或目录!!!求助呀呀!!!!!
  • 求助,编译出错!
  • 如何编译包中的java文件?【求助】
  • 编译内核时出现的一个问题,求助!
  • 求助 程序中添加互斥锁代码后编译怎么通不过 ?
  • 求助-FBreader编译
  • 求助一个编译中的/usr/bin/ld错误
  • 编译问题:求助
  • 求助,关于编译驱动进内核的一个问题,实在找不到资料了!
  • 求助,为什么在windows下g++编译出来的文件都很大?
  • 新手求助:如何编译...
  • 求助:程序能编译但不能链接,重新安装了GCC也是那样的问题
  • 紧急求助:请教在如何将一个文件夹上传到CVS上去
  • [求助]请教各位一个关于setsockopt的问题!
  • 【求助】请教一个linux命令。
  • 【求助】小弟现在正在学习Linux,遇到一个问题,请教各位
  • 高分求助,请教关于在ARM Linux下启动goahead服务器的问题。很急,在线等待,希望各位大虾帮帮,万分感激
  • 关于Applet和Servlet的通讯,请教各位大侠。紧急求助!!!
  • 【求助】请教一下关于条件变量的一个问题。
  • 请教高手关于linux安装分区问题?(紧急求助)
  • 求助:linux下,通过servlet画图,非得在xwindow下打开tomcat吗?内容:请教各位是怎么做的?
  • 求助 请教各位大人 SHELL编程
  • 求助:向各位大哥请教个进程问题,谢谢!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 大哥门求助!!
  • 高分求助:那位大哥知道那点有LINUX的教程下载,小弟急需,先行谢过
  • 求助:各位大哥为什么会出现这样的错误啊(ioctl: LOOP_CLR_FD: 设备或资源忙)谢谢!
  • 求助:各位大哥请帮我看看这段小程序是错在哪里?谢谢!
  • 求助:我这个内存共享的小程序,编译没错,运行有错,请各位大哥帮呆板能够我,谢谢!
  • 求助,安装了红帽子后进不了 iis7站长之家
  • 真心求助:各位大哥能帖一个 socket 程序的例子吗?(要是多线程序的),分少了开帖再加!谢谢!
  • 若干次尝试失败后,只好求助各位大哥了
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 怎样读取HZK24S前十区的内容啊???求助求助
  • 紧急求助!紧急求助!
  • 【求助】iplanet问题,求助高手解答!
  • 菜鸟求助,solaris下计算问题求助
  • 【求助】SOS紧急求助..............极为简单的问题...跪求....
  • 高分求助啊!求助SUSE 10.0 不能上网.
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 求助:linux下 vim的配置(高分求助)
  • red hat怎么安装gcc啊!总是出错,求助求助啊!!!yum源怎么改啊!!
  • 求助~~求助 ~~linux文件读写问题
  • 求助:信号 --13 进程中断
  • 求助,安装了红帽子后进不了
  • 新装linux求助
  • linux的 iptables问题求助
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 一个简单的问题,高分求助!!!
  • 紧急求助:Unix下给文件夹重命名用什么命令?谢谢!!!!
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求助


  • 站内导航:


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

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

    浙ICP备11055608号-3