1 #include"header_file.h"2
using
namespace
std;34
void swap(int a,intb)5
1112
void quick_sort(int a[7],int low,int
high)
1328 quick_sort(a,0
,low);
29 quick_sort(a,low+1,6
);30}31
32int main(void)33
;35 quick_sort(a,0,6
);36
37for(int i=0;i<7;i++)
38 cout<"";
39 }
執行出現c4717錯誤,看msdn解釋如下:
「function」: 遞迴所有控制項路徑,函式將導致執行時堆疊溢位
每個涉及函式的路徑都包含對該函式的呼叫。因為無法在沒有首次遞迴呼叫函式本身的情況下退出該函式,所以函式將永遠不退出。
下面的示例生成 c4717:
1compile with: /w1 /c3//
c4717 expected
4int func(int
x) 11}12
13int
main()
可以看出來是重複呼叫func(0),而這個func(0)並沒有乙個返回值,所以會導致永遠卡在這裡,永不退出。
回過頭看我們的函式: 當low=high的時候根本沒有返回,就會一直呼叫,產生同樣的錯誤,在前邊排序函式中加入
1if(low>=high)
2return;
就不會報錯了,不過還是會產生棧溢位的問題。
stackoverflow上的乙個一樣的問題:
看了之後改成了:
1void quick_sort(int a, int low, int
high)227
28 quick_sort(a, low, first - 1
);29 quick_sort(a, first + 1
, high);
30 }
然後程式執行之後沒有任何反應。原因不清楚,求人解答
解答:見另外一篇快排的博文,是由於不管while是否執行都會執行swap導致的
看看正確的應該怎麼寫:
1 #include 23using
namespace
std;45
void qsort(int a, int low, int
high)611
int first =low;
12int last =high;
13int key = a[first];/*
óã×ö±íµäµúò»¸ö¼çâ¼×÷îªêàöá
*/14
15while(first 1621
22 a[first] = a[last];/*
½«±èµúò»¸öð¡µäòæµ½µí¶ë
*/23
24while(first < last && a[first] <=key)
2528
29 a[last] =a[first];
30/*
½«±èµúò»¸ö´óµäòæµ½¸ß¶ë
*/31
}32 a[first] = key;/*
êàöá¼çâ¼µ½î»
*/33 qsort(a, low, first-1
);34 qsort(a, first+1
, high);35}
36int
main()37;
3940 qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);/*
õâàïôîäµúèý¸ö²îêýòª¼õ1·ñôòäú´æô½½ç
*/41
42for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
4346
47return0;
48 }
c 使用list出現錯誤
在做多執行緒訪問的時候,想使用list作為儲存佇列,加佇列的時候出現如下錯誤 d vcfile c 2012 02 20 after sampletest testmutex.h 31 error c2143 syntax error missing before d vcfile c 2012 0...
C和C 易出現的低階錯誤
1.通過指標訪問c 類的成員時,報錯。錯誤 run time check failure 3 the variable is being used without being initialized.原因 可能是該指標沒有指向乙個物件,只是宣告了乙個該類的指標 方案 例項化乙個該類的物件,讓指標指向...
C 的淺拷貝出現的錯誤
之前看一些資料提到淺拷貝的問題,即在複製物件時,只是對物件中的資料成員進行簡單的賦值,預設拷貝建構函式執行的也是淺拷貝。如果物件中存在動態成員,如指標,那麼僅僅做淺拷貝是不夠的,並且容易引發錯誤,最經典的例子 include include using namespace std class a a...