2 qq 33282385 qq_33282385 于 2016.01.25 14:38 提问

C语言段错误 非常急 大神们 求助 3C

我再写一个c的字典项目 dict.txt文件里有 20多万行单词 运行有段错误 把dict里的
单词减少到1万 就可以了 这是为什么 我用的链表 大神们帮我解决啊
图片说明
图片说明

7个回答

qq_27183003
qq_27183003   Ds   Rxr 2016.01.25 22:40

编写程序,重要的是做好错误处理,判断出错时是哪句出错了。
1、程序动态申请的内存比较大,应该检查一下是否申请失败,就是malloc之后,判断q是否为NULL
2、数据量这么大,也许有的数据格式不对,应该对fgets是否失败也做个检查。

    if(ferror(fp))
    {
        printf("Errorreading\n");
        clearerr(fp);
    }
qq_33846271
qq_33846271   2016.01.25 15:18

加下QQ,657588747,你定义和调用都没问题吧?

John_ToStr
John_ToStr   Rxr 2016.01.25 17:45

在 编程中以下几类做法容易导致段 错误,基本上是错误地使用 指针引起的。

1) 访问 系统数据区,尤其是往系统保护的 内存地址写 数据最常见就是给一个 指针以0地址。

2) 内存越界( 数组越界, 变量类型不一致等): 访问到不属于你的内存区域。

解决方法:我们在用C/ C++语言写程序的时候, 内存管理的绝大部分工作都是需要我们来做的。实际上, 内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难免会在此处犯些小 错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除虫”(debug),往往是效率低下且让人厌烦的,本文将就"段错误"这个内存访问 越界的错误谈谈如何快速定位这些"段错误"的语句。

下面将就以下的一个存在段 错误的程序介绍几种调试方法:

1 dummy_function (void) 2 { 3 unsigned char *ptr = 0x00; 4 *ptr = 0x00; 5 } 6 7 int main (void) 8 { 9 dummy_function (); 10 11 return 0; 12 }
作为一个熟练的 C/C++程序员,以上代码的bug应该是很清楚的,因为它尝试操作地址为0的 内存区域,而这个内存区域通常是不可访问的禁区,当然就会出错了。

John_ToStr
John_ToStr   Rxr 2016.01.25 17:46

在 编程中以下几类做法容易导致段 错误,基本上是错误地使用 指针引起的。

1) 访问 系统数据区,尤其是往系统保护的 内存地址写 数据最常见就是给一个 指针以0地址。

2) 内存越界( 数组越界, 变量类型不一致等): 访问到不属于你的内存区域。

解决方法:我们在用C/ C++语言写程序的时候, 内存管理的绝大部分工作都是需要我们来做的。实际上, 内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难免会在此处犯些小 错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除虫”(debug),往往是效率低下且让人厌烦的,本文将就"段错误"这个内存访问 越界的错误谈谈如何快速定位这些"段错误"的语句。

下面将就以下的一个存在段 错误的程序介绍几种调试方法:

1 dummy_function (void) 2 { 3 unsigned char *ptr = 0x00; 4 *ptr = 0x00; 5 } 6 7 int main (void) 8 { 9 dummy_function (); 10 11 return 0; 12 }
作为一个熟练的 C/C++程序员,以上代码的bug应该是很清楚的,因为它尝试操作地址为0的 内存区域,而这个内存区域通常是不可访问的禁区,当然就会出错了。

John_ToStr
John_ToStr   Rxr 2016.01.25 17:46

在 编程中以下几类做法容易导致段 错误,基本上是错误地使用 指针引起的。

1) 访问 系统数据区,尤其是往系统保护的 内存地址写 数据最常见就是给一个 指针以0地址。

2) 内存越界( 数组越界, 变量类型不一致等): 访问到不属于你的内存区域。

解决方法:我们在用C/ C++语言写程序的时候, 内存管理的绝大部分工作都是需要我们来做的。实际上, 内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难免会在此处犯些小 错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除虫”(debug),往往是效率低下且让人厌烦的,本文将就"段错误"这个内存访问 越界的错误谈谈如何快速定位这些"段错误"的语句。

下面将就以下的一个存在段 错误的程序介绍几种调试方法:

1 dummy_function (void) 2 { 3 unsigned char *ptr = 0x00; 4 *ptr = 0x00; 5 } 6 7 int main (void) 8 { 9 dummy_function (); 10 11 return 0; 12 }
作为一个熟练的 C/C++程序员,以上代码的bug应该是很清楚的,因为它尝试操作地址为0的 内存区域,而这个内存区域通常是不可访问的禁区,当然就会出错了。

很显然,你非法访问内存了、、、

u012662905
u012662905   2016.01.25 21:05

It may account for your code access the illgeal memory area.

91program
91program   Ds   Rxr 2016.01.25 14:41

malloc 申请来的内容,在使用前最好是先判断一个是否为 NULL。
为 NULL 说明失败了,不能继续使用。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!