读书人

[C++] 为何程序总是跳转到vector头文件

发布时间: 2012-11-18 10:51:22 作者: rapoo

[C++] 为什么程序总是跳转到vector头文件中,然后终止呢
如下代码实现mergesort,\

C/C++ code
#include <iostream>#include <vector>using namespace std;void merge (vector<int> &arr, int first , int mid, int last, vector<int> &crr){        int f = first;        int m = mid + 1;        int t = 0;        while (f <= mid && m <= last)        {                if (arr[f] < arr[m])                        crr[t++] = arr[f++];                else                        crr[t++] = arr[m++];        }        while (f <= mid)                crr[t++] = arr[f++];        while (m <= last)                crr[t++] = arr[m++];        for (int i = 0; i < t; ++i)                arr[first + i] = crr[i];}void mergeSort (vector<int> &arr, int first, int last, vector<int> &crr){        int mid = (first + last) / 2;        while (first < mid)        {                mergeSort (arr, first, mid, crr);                mergeSort (arr, mid + 1, last, crr);                merge (arr, first, mid, last, crr);        }}void mergeSort (vector<int> &arr){        vector<int> crr (arr.size());        mergeSort (arr, 0, arr.size() - 1, crr);}int main (){        int a[] = {                1, 10, 20, 30, 50, 2, 88, 4, 60, 100        };        vector<int> arr (a, a + 10);        mergeSort (arr);        for (vector<int>::iterator iter = arr.begin(); iter != arr.end(); ++iter)                cout << *iter << '\t';


gdb单步跟踪到调用 mergeSort (arr, 0, arr.size() - 1, crr);
输出如下内容
(gdb) s
std::vector<int, std::allocator<int> >::size (this=0x7fffffffe0d0)
at /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_vector.h:533
533 { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
然后程序就pause了, ...

[解决办法]
你的mergeSort函数里那个while死循环了~

读书人网 >C++

热点推荐