请问如下C语言代码为何会导致程序崩溃

1、main函数内部声明的变量会在栈上分配空间,默认的栈空间是比较小的,你开了很大的数组很可能导致栈溢出。不过一般系统默认栈大小1M(windows),因此几万个的数组还是不会造成栈溢出的。2、主要的问题应该是你的快排写错了...会导递归无法跳出...栈溢出,我修改了一下:void quick_sort( int a, int low, int high ){\tif ( low \u0026gt;= high )\t{\t\treturn;\t}\tint\tfirst\t= low;\tint\tlast\t= high;\tint\tkey\t= a; /*用字表的第一个记录作为枢轴*/\twhile ( first \u0026lt; last )\t{\t\twhile ( first \u0026lt; last \u0026amp;\u0026amp; a \u0026gt;= key )\t\t{\t\t\t--last;\t\t}\t\ta = a; /*将比第一个小的移到低端*/\t\twhile ( first \u0026lt; last \u0026amp;\u0026amp; a \u0026lt;= key )\t\t{\t\t\t++first;\t\t}\t\ta\t\t= a; /*将比第一个大的移到高端*/\t} a\t= key; /*枢轴记录到位*/\tquick_sort( a, low, first - 1 );\tquick_sort( a, first + 1, high );}另外,快排可以参考一下《算法导论》中的版本,这个版本比较简洁,思路清晰,不容易写错。QUICKSORT(A, p, r) { if p \u0026lt; r { q = PARTITION(A, p, r); QUICKSORT(a, p, q-1); QUICKSORT(a, q+1, r); }}PARTITION(A, p, r) { x = A; i = p-1; for j = p to r-1 { if A ≤ x { i = i + 1; exchange(A, A); } } exchange(A, A); return i+1;}平常使用的时候推荐用algorithm库里的std::sort和qsort两个库函数,这样就不用手写了。当然,学习的时候还是自己动手写加深理解比较好。建议:1、函数声明放在main的外面2、数组声明放在main的外面,或者直接用new在堆上分配空间3、你这写的明明是C++...C哪来的iostream和namespace?4、C++的头文件引用最好用\u0026lt;ctime\u0026gt;\u0026lt;cstdlib\u0026gt;这种形式
■网友
噫,评论区开始撕了……大家淡定点,都是来学(guan)习(shui)的,火气不要太大……不过C真的不是C++的子集……-------答题的分割线--------题主表示已经解决问题了……不过为了其他看到这个问题的人还是把解决方案贴上来吧……应该对了吧,如果不对请在评论区告诉我……时间紧没细看……void quick_sort( int a, int low, int high ){ if ( low \u0026gt;= high ) { return; } int\tfirst\t= low; int\tlast\t= high; int\tkey\t= a; /*用字表的第一个记录作为枢轴*/ while ( first \u0026lt; last ) { while ( first \u0026lt; last \u0026amp;\u0026amp; a \u0026gt;= key ) { --last; } a = a; /*将比第一个小的移到低端*/ while ( first \u0026lt; last \u0026amp;\u0026amp; a \u0026lt;= key ) { ++first; } a\t\t= a; /*将比第一个大的移到高端*/ a\t= key; /*枢轴记录到位*/ } quick_sort( a, low, first - 1 ); // here quick_sort( a, first + 1, high );}-------嘲讽的分割线----------------都一年了还不会debug。。都一年了还分不清c和c++。。
■网友
算法写错了,2个递归应该在循环外面}位置错误引发的血案
■网友
试证明你用的的确是c代码,而不是c++,我读书少你不要骗我
■网友
说话好冲……还真诚求教!感谢
■网友
你的函数声明都放在main里面,这么奇怪


    推荐阅读