问题描述
解决方案
编写程序,重要的是做好错误处理,判断出错时是哪句出错了。
1、程序动态申请的内存比较大,应该检查一下是否申请失败,就是malloc之后,判断q是否为NULL
2、数据量这么大,也许有的数据格式不对,应该对fgets是否失败也做个检查。
if(ferror(fp))
{
printf("Errorreadingn");
clearerr(fp);
}
解决方案二:
加下QQ,657588747,你定义和调用都没问题吧?
解决方案三:
在 编程中以下几类做法容易导致段 错误,基本上是错误地使用 指针引起的。
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的 内存区域,而这个内存区域通常是不可访问的禁区,当然就会出错了。
解决方案四:
在 编程中以下几类做法容易导致段 错误,基本上是错误地使用 指针引起的。
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的 内存区域,而这个内存区域通常是不可访问的禁区,当然就会出错了。
解决方案五:
在 编程中以下几类做法容易导致段 错误,基本上是错误地使用 指针引起的。
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的 内存区域,而这个内存区域通常是不可访问的禁区,当然就会出错了。
很显然,你非法访问内存了、、、
解决方案六:
It may account for your code access the illgeal memory area.
解决方案七:
malloc 申请来的内容,在使用前最好是先判断一个是否为 NULL。
为 NULL 说明失败了,不能继续使用。