段错误的原因+c语言中
答:我虽然没有时间和精力帮助你调试程序,但是根据我的编程经验,有可能是你的结构数组越界的可能性最大,麻烦你再仔细在集成编程环境中通过在可疑之处设置断点、单步跟踪各个变量的值等手段来进行程序故障排除。另外,我怀疑你的 strncpy 对字符串进行拷贝完之后,字符串结尾是否以空字符 '\0' 进行结束了?
答:这个解释没有错,我想你是觉得,k=&p,那么之后p怎么变,k指向的位置没有变,所以觉得有问题吧?但是你要仔细看,k是没有变,但是k指向的是“指向p的指针”,所以*k总能得到新的p,对吧。当p向前移动了,*k得到的就是移动后的p,那么**k得到的当然就是新指向的a数组中的元素了。
答:你的输入参数呢?argv是输入参数啊,你输入的时候是不是没带参数?带参数的程序最好在前面写个判断,避免这种错误:if(argc != 2) return 0;
答:其实你应该想想自己哪里写得不对,关键代码还是应该贴上,其中问题有很多种可能,另外,段错误一般是不会出现在文件这里的,除非你传参严重有问题,段错误一般都是内存错误,文件错误不会报段错误的,据我所知,段错误只可能在以下两种情况下发生,1.访问了未映射的内存地址;2.没有足够的内存访问权限(比如,程序...
答:段错误的原因是:main函数中 InitQueue();应改为:q= InitQueue();其他部分如果有问题,请先自查。
答:这个程序有BUG,执行时极可能报告段错误(segmentation fault)。错误原因在于:指针p没有初始化。--- 如果:char s[] = "123456789", *p, i = 0;改为:char s[] = "123456789", *p = s, i = 0;那么:程序输出结果为:*2*4*6*8 原因:当i = 0,2,4,6,8时,if条件i%2 == ...
答:段错误了,没有运行,只看程序的错误有 1.fin = fopen ( " p9.data ", " r " ) ;没有检查fin的有效性,当打开文件失败时,访问fin会造成段错误,去掉引号中的空格,并检查fin是否有效。2.for后面的分号去掉,不然数组越界访问a[n]了,可能造成段错误 for ( i = 0 ; i < n ; i++ )...
答:段错误(segmentation fault )原因是你f:\\VC++\\Microsoft Visual Studio\\MyProjects\\342\\data.txt这个路径的问题。你去看下这个路径下有data.txt文件吗
答:段错误了,没有运行,只看程序的错误有 1.fin = fopen ( " p9.data ", " r " ) ;没有检查fin的有效性,当打开文件失败时,访问fin会造成段错误,去掉引号中的空格,并检查fin是否有效。2.for后面的分号去掉,不然数组越界访问a[n]了,可能造成段错误 for ( i = 0 ; i < n ; i++ )...
答:p所指内存只有一个字节。p++再赋值就溢出了,所以出错了。
网友评论:
习莫13247259148:
GCC下调试C语言程序为什么显示“段错误”? -
9281牟蚀
: 在 C 程序中,经常会遇到段错误(Segment error),这种问题出现的原因可能如下:1. 对一个 NULL 指针解引用;2. 访问程序进程以外的内存空间.实际上,第一个原因可以归到第二个原因.在一个 C 程序的虚拟内存空间中,从低地址到高地址依次是代码区,堆区(向上增长),栈区(向下增长),最上是常量区.其中 NULL 指针的位置正好是虚拟内存中地址为 0 的位置,而这个位置是不属于以上 4 个区域的,同理一些比较低的地址也不属于这四个区,所以造成段错误的原因是访问了程序虚拟内存空间 4 个区以外的地址.在平时的开发中,最大的可能还是对 NULL 进行了解引用.
习莫13247259148:
C语言小问题 段错误是什么? -
9281牟蚀
: 1. 段错误一般是当你访问了未申请的内存或非法的内存时产生的.主要还是程序的内存管理有问题.2. 其实打开文件是将文件指针读到一个内存中,来进行操作.lz的这种情况,文件路径有问题,...
习莫13247259148:
c语言 输出段错误 为甚嘛呢? -
9281牟蚀
: strcat()函数是从数组source[]数组的第一个'\0'开始将后一个参数中的字符复制上去的,你定义时造成source[]数组只能容纳三个字符,再将其它字符串复制时,空间不够用,就造成了段错误,段错误是对非法地址的操作造成的#include #...
习莫13247259148:
c语言数组段错误的原因 -
9281牟蚀
: 大部分都是指针引起的,比如指针指向了非法空间,在对指针赋值前就使用,指针没初始化等. 比如你定义一个指针,int *p; *p=5; 在没有给p赋值的情况下就使用了p,正常应该 int a; p = &a; *p=5;
习莫13247259148:
运行后老说分段错误?c语言 -
9281牟蚀
: 程序运行在内存中;系统在程序运行之前会在内存中先给程序画出一个空间这个空间有些来存放代码的;有些来存放运行时的变量,还有些.这个空间有一个区间使用来存放运行时的变量什么的段错误就是程序运行时,变量访问越界一类的问题可能
习莫13247259148:
c语言段错误 -
9281牟蚀
: 调试了一下,有以下问题:1、语法方面,scanf函数赋值变量需用地址,这是程序出错的原因2、逻辑方面,未能排除同一数组中的相同项.另问题代码用双重循环的方式有内存溢出的风险.修改代码和注释如下,#include <stdio.h> int main () ...
习莫13247259148:
C语言段异常原因,HELP~~
9281牟蚀
: 这个问题不难!看不懂你要做什么,可以详细说明一下.首先在你编译好的可执行文件的同级目录下要有一个3.in文件,内容为你要测试的数据,至少5组;if(i==5){t1=t;for(;t1->p->p!=NULL;t1=t1->p);t2=t1->p;t1->p=NULL;free(t2);}这段代码肯定会出段错误
习莫13247259148:
一个为什么会段错误的C语言问题!当输入的大于三位数就提示段错误这是为什么呀? -
9281牟蚀
: 那个char *p;是一个8位的二进制 所以你输入的最大值是255 大了就溢出 了因为是指向字符型 的 建议用字符数组接收 而且 p指针没有初始化
习莫13247259148:
为什么C语言中使用内存映射修改文件内容总是出现段错误 -
9281牟蚀
: C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间. 含有null结束符,你的有吗
习莫13247259148:
c程序运行 一次出现段错误 一次又不出现段错误,会是什么原因 -
9281牟蚀
: 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况.这里贴一个对于“段错误”的准确定义(参考...