Ⅰ C語言程序,編譯連接時都沒問題但運行時出錯了
一眼就能看出的錯誤
你的
char
*name[100];
只是指針,沒有分配內存,你把它做為二維數組用了
另外,字串數組不能只交換指針的
給你一個簡單的參考(固定5個字串,非函數調用)
#include
<stdio.h>
#include
<string.h>
int
main()
{
int
i,j;
char
str[5][200],temp[200];
printf("Please
inout
five
strings:\n");
for(i=0;i<5;i++)
scanf("%s",str[i]);
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if
(strcmp(str[j],str[j+1])>0)
{
strcpy(temp,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],temp);
}
for(i=0;i<5;i++)
printf("%s\n",str[i]);
return
0;
}
Ⅱ 下面這個程序編譯連接都沒問題,運行時出現下面的錯誤
邏輯問題,在main函數里聲明的tkm這個對象的內存不在堆裡面,無法使用delete刪除,想要實現你的功能,可以把main函數做如下修改:
int
main()
{
TestKillMyself*
tkm=new
TestKillMyself
();
tkm->KillMe();
return
0;
}
注意,這里的tkm就在堆裡面分配的空間,可以使用delete操作了,並且,此時在main裡面不能再使用delete
tkm這樣的語句了
Ⅲ C語言程序在編譯鏈接的時候都沒有問題,在調試的時候出問題了
在
fscanf.c
的第54行出錯。
表達式:stream!=NULL
關於如何您的程序可能會導致斷言失敗的信息,請參閱Visual
C
+
+文檔
Ⅳ C語言編程: 為什麼編譯和鏈接都沒有問題 但就是運行不出結果
最後的列印格式應該用 %f,%d是列印整數用的。
f2/f1是整數運算,只保留整數部分,比如3/2的結果是1,而不是1.5,改成這個樣子
s=s+(double)f2/(double)f1;
f2=f,f1=f2,結果是f1和f2一樣了,這個賦值順序有問題。
Ⅳ c++程序運行時編譯和連接沒有錯誤 執行時會出現xx.exe已停止工作
大致瀏覽了一下,沒有發現明顯錯誤。
這種情況,就需要調試了。F5執行程序,遇到運行警告後中斷,通過調用堆棧查看具體問題代碼行。之後,通過變數觀察、設置斷點、單步執行等方式,查找具體問題。
編譯鏈接無誤,只是沒有語法錯誤,運行時錯誤一般都是代碼中對內存、指針、句柄的非法操作造成的。
另外,如果沒有特殊指定要求,用一個char[100]代替鏈表指針是個不錯的選擇,因為在沒有類管理的前提下,鏈表不僅增加了很多程序復雜度,而且還沒有達到節省空間和方便靈活的目的。
Ⅵ 一個C語言程序,編譯、鏈接都沒問題,但一運行就出錯,高手知道下~~
改好了:
#include <stdio.h>
#include <stdlib.h>
typedef struct dxs
{
int exp,coef;
struct dxs *next;
}oxs,*o_xs;
/*****輸入函數*****/
void build(int i,o_xs pa)
{
int j,sum_oxs,exps=0,coefs=0;
oxs *p;
pa->coef=coefs;
pa->exp=exps;
pa->next=NULL;
p=pa;
printf("輸入第%d個多項式的個數\n",i);
scanf("%d",&sum_oxs);
for(j=sum_oxs;j>0;j--)
{
printf("輸入系數和指數");
scanf("%d%d",&coefs,&exps);
p->coef=coefs;
p->exp=exps;
p->next=pa;
pa=p;
p=(oxs*)malloc(sizeof(oxs));
}
free(p);
}
/*****輸出函數*****/
void show(o_xs pa)
{
while(pa!=NULL)
{
printf("%d\t%d\t",pa->coef,pa->exp);
pa=pa->next;
}
printf("\n");
}
/*****排序函數(升序)*****/
void list_oxs(o_xs pa)
{
oxs tt,tt0;
oxs *p=pa,*q=pa;
tt.coef=p->coef;
tt.exp=p->exp;
while(p!=NULL)
{
while(q!=NULL)
{
if(q->exp<tt.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(o_xs pa,o_xs pb)
{
int sum_coef;
oxs *p,*q,*u,*pre;
pre=pa;
u=pb;
p=pa->next;
q=pb->next;
while((p!=NULL)&&(q!=NULL))
{
oxs *p,*q,*u,*pre;
if(p->exp>q->exp)
{
u=q;
pre->next=u;
u->next=p;
pre=u;
q=q->next;
}
else if(p->exp<q->exp)
{
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()
{
oxs a,b;
build(1,&a);
list_oxs(&a);
show(&a);
build(2,&b);
list_oxs(&b);
show(&a);
add(&a,&b);
show(&a);
}
Ⅶ C語言程序編譯鏈接沒錯誤但結果不對…
scanf("%d,%d",&a,&b);你把這句分開寫就好了,scanf("%d",&a);scanf("%d",&b);因為你在輸入a以後,會按下回車,如果你寫在一行就會把這個回車符賦給了b,所以b就是錯誤的!
Ⅷ C++程序編譯連接都沒有問題,但是運行時卻什麼東西都出不來,也沒有報錯,怎麼回事啊
應該是邏輯錯誤吧。邏輯錯誤不同於語法錯誤,編譯器是不會告訴你的。
記得我做數據結構課設的時候就是指針指向不對,結果雖然能運行,但是就是不出結果。。好好檢查一下吧。書上的例子最好看懂了以後自己默敲在電腦里,而不要做typewriter,明白么?望樓主收獲更多。
Ⅸ c語言中編譯和鏈接沒問題,執行出錯是什麼原因
說明代碼中的邏輯有問題
可能出現了越界一類的
或者代碼設計的本身就有問題。
這個要看具體代碼才清楚的。