2019年四肖期期准_2019年马会正版_2019六肖生肖期期准

内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

首页 > 小知识 > 正文

C程序编译没问题,但是运行要崩溃

2019-01-28 出处:网络 整理:zhishizhan.net

    话题:C程序编译没问题,但是运行要崩溃

    回答:我大概看了下你的源码,最主要的问题是你没有对front进行初始化就对其进行了作,front指向不确定,对其进行作当然会破坏程序本身。 另外我要说的是,队列无论是用栈、链表、数组等等实现,都有现成的算法,你参考下就好了。你的源码里面有很多不范的地方,例如:1、判断队列为空的方法一般都是用front=rear;2、按你的思路rear-next永远都应该等于NULL,即队尾为空,用它判断队列是否为空是不对的。3、 linkshow()函数,判断队列到队尾用q!=NULL也不范,q是个结构体。4、linkshow()函数,输出的应该为q-data。5、你定义了p, front, rear为全指针变量,函数就不需要带参数了。另外,还有不少逻辑错误,所以最好参考其他已有算法(教科书),重新编写你的程序。如果你想用自己的算法,就要解决好以下几个问题:1、新加队列元素,需要开辟内存空间2、注意判断队列为空的算法,不要遗漏当只有一个队列元素时候的输出显示问题(按你的思路,队列只有一个元素时,其next也为空)

    参考回答:你的参数传递的不对,max和min已经是指针了,在加上*号就不是指针了。调用fun函数的时候直接传max和min就行,不用带*号。使用符号传递时虽然满足了类型的要求,但是实际是对指针再次取了,参数内容也不对。

    话题:C语言编程时编译组建都没问题但是运行崩溃了

    回答:你的参数传递的不对,max和min已经是指针了,在加上*号就不是指针了。调用fun函数的时候直接传max和min就行,不用带*号。使用符号传递时虽然满足了类型的要求,但是实际是对指针再次取了,参数内容也不对。

    参考回答:我也碰到过这种过程可能是在安装时,的设置安装方法不同一般有两种安装吧:一是custom另一个是special一般选择是custom,但不成果的话,选择special就行了!一般默认形式不要更改就可以了!

    话题:在C++中运行程序,为什么在编译时没有问题,但是回到程序的执行

    回答:编译器又不是的,虽然已经足够只智能,但是对于一个传递了无数次的指针是否仍然有效或者传递过一次以上的数组的范围等问题编译器是做不来的(其实并不是做不来,只是为了效率很少去做这些事,你总不希望一个程序编译一天吧)。所以要依靠码风格解决这些问题。其中最常见的是数组访问越界和野指针问题,当然也有部分野引用问题也会造成运行时崩溃。所以你要通过改变编程风格或者确保每次进行内存的相关作的时候尽力谨慎。前者可以参考 effective C++ 系列和imperfect C++这些书。另外你编写的码有很大的问题:Bitnode *gen; 根节点int sum;全变量只在本有效,在函数内部使用全自动变量是非常危险的。用返回值又不会怎么样……CountLeaf( T-gt;lchild, count);CountLeaf( T-gt;rchild, count);这个会无限循环……这递归没有结束条件……

    参考回答:数组越界访问或者使用了一个指向null的指针 这些都是运行时错误,编译不出来

    话题:C语言,编译没问题,但是运行时程序出现崩溃。

    回答:注意 不要边界溢出不要使用的超出申请的范围

    参考回答:展开全部 可能是运行时产生了内存溢出问题

    话题:C语言编程时编译组建都没问题但是运行崩溃了

    回答:你的参数传递的不对,max和min已经是指针了,在加上*号就不是指针了。调用fun函数的时候直接传max和min就行,不用带*号。使用符号传递时虽然满足了类型的要求,但是实际是对指针再次取了,参数内容也不对。

    话题:C程序编译时没问题,为什么运行出错

    回答:int a,b; scanf("%d%d",a,b); 参数必须是指针()才可以。 scanf()函数要求参数必须是指针类型,即将传输到其内,才可以让a , b变量中获取到数据。 如果你学过指针,你就解了。 C语言中函数的调用中,参数传递,只能传递数值。如果只是将数值传递过去(接收者是形参),在子函数中变化,形参的变化,不会影响到实参数据的内容。 C中,每定义一个变量,系统都会在内存中给其分配一个空间用来存储数据。而这个空间的编号就是这个变量的。当我们将这个传递到子函数中,子函数在作数据时,就会改变这个中的数据,这样,实参的数据是会发生变化。 而你程序中,传递的是a b本身的值(可能是0,可能是1,可能是任意的数),scanf()将这两个值当作去作,因此会产生系统错误,导致程序运行停止。

    话题:编译没错误 !运行的时候就系统崩溃!请问高手怎么解决???

    回答:伙计64位可以使用VC6.0 但有点小问题,不过不影响使用,你这样的情况我估计你没安装MSDN 6.0 这个需要跟VC6.0配合使用少了他VC6.0在编译是时候就会碰到问题(比方说使用string的时候)虽然VC6.0在 64bit是能运行 但本人

    参考回答:展开全部 伙计64位可以使用VC6.0 但有点小问题,不过不影响使用,你这样的情况我估计你没安装MSDN 6.0 这个需要跟VC6.0配合使用少了他VC6.0在编译是时候就会碰到问题(比方说使用string的时候)虽然VC6.0在 64bit是能运行 但本人建议你还是使用更高版本吧 比方说VS2010比VC6.0好用多了,查错误方便

    话题:c程序编译没问题,运行时就会停止怎么回事?

    回答:字符串输入为 scanf("%s",a); *p=a[0]; *q=a[i]; 改为 p=amp;a[0]; q=amp;a[i-1]; for(n=0;nlt;=i;n++) { if(*(p+n)==*(q-n)) { printf("该字符串是回文"); } else { printf("该字符串不是回文"); } } 改为 for(n=0;nlt;=i;n++) { if(*(p+n)!=*(q-n)) { printf("该字符串不是回文"); break; } } if(ngt;i) printf("该字符串是回文");

    参考回答:软件的问题吧,我有时候也遇到过。

    话题:一个C语言程序,编译、链接都没问题,但一运行就出错,高手知道下

    回答:void build(int i,duo_xs *pa) c语言里没有引用,可以通过2级指针来直接修改一级指针。 { if(NULL == (*pa = (dou_xs)molloc(sizeof(douxs)))) return; (*pa)-coef=coefs; (*pa)-exp=exps; (*pa)-next=NULL; . } 调用时: main() { dou_xs a; douxs *a; build(1,a); } 或者定义: dou_xs build(int i) { dou_xs a; a = molloc. return a ; } 主函数 main() { dou_xs a; a = build(1); show(a); }

    参考回答:改好了:#include #include typedef struct dxs { int exp,coef; struct dxs *next; }duoxs,*duo_xs;/*****输入函数*****/ void build(int i,duo_xs pa) { int j,sum_duoxs,exps=0,coefs=0; duoxs *p; pa-coef=coefs; pa-exp=exps; pa-next=NULL; p=pa; printf("输入第%d个多项式的个数\n",i); scanf("%d",sum_duoxs); for(j=sum_duoxs;j0;j--) { printf("输入系数和指数"); scanf("%d%d",coefs,exps); p-coef=coefs; p-exp=exps; p-next=pa; pa=p; p=(duoxs*)malloc(sizeof(duoxs)); } free(p); }/*****输出函数*****/ void show(duo_xs pa) { while(pa!=NULL) { printf("%d\t%d\t",pa-coef,pa-exp); pa=pa-next; } printf("\n"); }/*****排序函数(升序)*****/ void list_duoxs(duo_xs pa) { duoxs tt,tt0; duoxs *p=pa,*q=pa; tt.coef=p-coef; tt.exp=p-exp; while(p!=NULL) { while(q!=NULL) { if(q-exp { tt0.exp=tt.exp;tt0.coef=tt.coef; tt.exp=q-exp;tt.coef=q-coef; q-exp=tt0.exp;q-coef=tt0.coef; } q=q-next; } tt0.exp=tt.exp;tt0.coef=tt.coef; tt.exp=p-exp;tt.coef=p-coef; p-exp=tt0.exp;p-coef=tt0.coef; p=p-next; q=p; } }/*****多项式相加函数*****/ void add(duo_xs pa,duo_xs pb) { int sum_coef; duoxs *p,*q,*u,*pre; pre=pa; u=pb; p=pa-next; q=pb-next; while((p!=NULL)(q!=NULL)) { duoxs *p,*q,*u,*pre; if(p-expq-exp) { u=q; pre-next=u; u-next=p; pre=u; q=q-next; } else if(p-expexp) { pre=p; p=p-next; } else { sum_coef=p-coef+q-coef; if(sum_coef==0) { u=p; p=p-next; free(u); u=q; q=q-next; free(u); } else { p-coef=sum_coef; pre=p; p=p-next; u=q; q=q-next; free(u); } } if(q!=NULL) { pre-next=q; } } }/*****main函数*****/ void main() { duoxs a,b; build(1,a); list_duoxs(a); show(a); build(2,b); list_duoxs(b); show(a); add(a,b); show(a); }

    话题:程序编译没有问题,怎么就运行不了呢

    回答:问题很多。 声明中,两个char* 在一行,中间要用分号;,否则会并定义被忽略指针不能在没有分配空间的时候就作(这个是机原因)码逻辑混乱,我看了没有看懂你要做什么,貌似去空格?分词?反正肯定实现不了。 解决问题2的简单

    参考回答:展开全部 问题很多。 声明中,两个char* 在一行,中间要用分号;,否则会并定义被忽略指针不能在没有分配空间的时候就作(这个是机原因)码逻辑混乱,我看了没有看懂你要做什么,貌似去空格?分词?反正肯定实现不了。 解决问题2的简单办法: char main_str[0]; char sub_str[0]; 在一行不能有俩个char关键字

分享给小伙伴们:

相关文章

搞笑图片

,