C语言程序运行崩溃

C语言程序运行崩溃,第1张

这种情况叫做 runtime error (运行时错误)。

在 Windows 碧昌7 上这样提示:

在 Windows XP 上这样提示:

runtime  error (运行时错误)就是程序运行到一半,程序就崩溃了。

比如说:

①除以零

②数组越界:int a[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

⑤数组开得太大,超悔猜扒出了栈的范围,造成栈溢出:int a[100000000]

同学,你是对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 ),其它代码不变,就能看到你想要的效果。

我大概看了下你的源码,最主要的问题是你没有对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也为空)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12533766.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存