① c数据结构为什么一运行内存就会崩溃
【1】一运行就崩溃的原因:main函数中的BiTree T; 这个指针T指向了未知的位置,并非空指针,当create_BST函数调用Insert_BST函数,不会进入
if (T==NULL)
{T=q;
//p=T;
}
而是进入语句p=T; p是刚申请了内存的指针,现在又把一个指向未知区域的指针地址赋值给它,使它再操作左右子树时又指向不同未知地址,操作了不该操作的内存,当然会出错。自己可以设置断点调试一下就知道了。改为BiTree T=NULL,这样就可以创建和输出整棵树了。
【2】删除节点函数是有问题的,自己可以搜一下二叉排序树删除节点的程序,很多。
② c语言 程序能运行,但是有时运行中间会崩溃,一般因为什么怎么解决
程序设计的很重要一点就是要保证程序的稳定性,运行时崩溃就是稳定性不够,一般比较常见的就是数据类型不符、内存泄漏等错误造成的。还有,C语言的稳定性上一般也是比较差的
③ 这个c语言代码哪里出问题了一运行就崩溃
如果直接在编译器中运行(后面没有参数,文件in用的是第一个参数*argu[1],文件out用的是第二个参数*argu[2]),那么就会崩溃。因为没有参数,那么文件打开就失败了,而继续对打开失败的文件指针进行操作就崩溃了。
正确的用法是,编译成.exe文件后,在DOS窗口中进入这个.exe文件所在目录,然后输入“这个.exe文件名 输入文件名字 输出文件名 回车”才行。比如我编译好的文件名是1.exe,输入文件名是input.txt,准备输出的文件叫out.txt,那么就不会崩溃了,如图
要避免没有输入参数崩溃的情况,可以在程序中进行文件打开判断,在
in=fopen(argu[1],"r");
out=fopen(argu[2],"w");
后面增加打开判断
if(in == NULL || out == NULL) exit(1);
就不至于没有参数的时候崩溃,而是直接退出(或者也可以在这个if后面加上使用说明的输出信息)。
④ C语言编程时编译组建都没问题但是运行崩溃了
你的参数传递的不对,max和min已经是指针了,在加上*号就不是指针了。调用fun函数的时候直接传max和min就行,不用带*号。使用&符号传递时虽然满足了类型的要求,但是实际是对指针再次取地址了,参数内容也不对。
⑤ c语言编程程序崩溃
同学,你是对c语言的按值传递理解不到位。
void s ( int * p_c )
{
p_contemp = ( int * ) malloc ( 5 * sizeof ( int ) )
此处为for循环控制语句依次给数组依次输入5个数
}
你最初的代码,s ( int * p_c )中,你用malloc 分配了5个int的空间,把此空间的地址赋给了p_contemp,而没有赋给指针p_c,所以p_c指向空,在main()中调用a . h_p
会出错,其为空指针。
而且就算你在s ( int * p_c )中,把malloc 分配的5个int的空间的地址赋给s的参数p_c指针,在main()中,调用a . h_p ,仍然会出错,a . h_p 仍然为空指针。
因为在c语言中函数的参数是按值传递的,即在本题中,你把a . h_p 作为实参传递给s ( int * p_c )函数,此时a.h_p为空指针,根据按值传递规则,形参p_c将与实a.h_p具有相同的值:空。
在s ( int * p_c )内,( int * ) malloc ( 5 * sizeof ( int ) )执行后,把分配到的空间地址赋给形参p_c,此时形参p_c不为空了,但是根据按值传递原则,实参所指向的地址没变,仍为空。
你所谓的“指针传递只要改一个,另一个的内容应该也做了改动”是对的,但是你的代码写的不对。你可以在函数外面弄一个指向某个地址的指针,把它传给一个参数为指针的函数,在函数内修改指针指向的内容,则在函数外实参指针指向的内容也会变。
你也可以考虑用c++的引用传递,即把你最初的s ( int * p_c )声明为s ( int * &p_c ),其它代码不变,就能看到你想要的效果。
⑥ 一个c语言问题,为什么不报错,但程序运行到一半就崩溃了呢
说明你写的代码没用语法错误,但是逻辑有错误!
程序运行到一半,就无法运行了!
编译器不报错,不代表你的程序就是对的!
⑦ C语言一运行就崩溃 编译器检查不出错误
#include
<stdio.h>
#include
<conio.h>
void
main()
{
int
a;
printf("请输入一个年份:\n");
scanf("%d",&a);
if((a%4)==0
&&
(a%100)!=0)//多个=号
{
printf("这一年是闰年。\n");
}
else
if(
a%100==0
&&
a%400==0
)
{
printf("这一年是闰年。\n");
}
else
{
printf("这一年是平年。\n");//分号要英文符号,你打的是中文的
}
getch();
}//语法错误的已经帮你注释出来了
⑧ C语言程序运行崩溃
这种情况叫做 runtime error (运行时错误)。
在Windows7 上这样提示:
runtimeerror(运行时错误)就是程序运行到一半,程序就崩溃了。
比如说:
①除以零
②数组越界:inta[3];a[10000000]=10;
③指针越界:int*p;p=(int*)malloc(5*sizeof(int));*(p+1000000)=10;
④使用已经释放的空间:int*p;p=(int*)malloc(5*sizeof(int));free(p);*p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:inta[100000000]
⑨ C语言程序运行后 出现exe停止工作 为什么呢
这种情况叫做 runtime error (运行时错误)。
在 Windows 7 上这样提示:
runtimeerror(运行时错误)就是程序运行到一半,程序就崩溃了。
比如说:
①除以零
②数组越界:inta[3];a[10000000]=10;
③指针越界:int*p;p=(int*)malloc(5*sizeof(int));*(p+1000000)=10;
④使用已经释放的空间:int*p;p=(int*)malloc(5*sizeof(int));free(p);*p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:inta[100000000]
⑩ C语言的问题,为什么运行会停止工作(无响应)
1、程序停止响应,是因为内存出现非法读写操作,请检查代码所有关于内存读写的地方。
2、例如:
不能用下标
10
读取数组
x1
的内容,这样子会导致数组上标越界
只能使用
0
-
9
来读取数组
x1
的内容