Quick.exe中0x003714e9处的未处理异常:0xC00000FD:堆栈溢出

时间:2016-05-08 22:35:51

标签: c++ visual-c++ stack-overflow

这从未发生在我身上,我不知道如何解决它。它只是说“Quick.exe中的0x003714e9处的未处理异常:0xC00000FD:堆栈溢出。”然后打破并突出显示括号并在其旁边显示一个箭头,我认为这意味着错误位于那里。 附:括号以粗体显示

#include<iostream>
using namespace std;

int partition(int data[], int left, int right)
**{**
    int pivot = data[left];
    while(true)
    {
        while(data[left] < pivot)
        { 
            left++;
        }
        while (data[right]>pivot)
        {
            //find smaller value than pivot from top array
            right--;
        }

        if(left < right)
        {
            //change pivot place
            int temp = data[right];
            data[right] = data[left];
            data[left] = temp;
        }
        else
        {
            return right;
        }
    }
}

void quickSort (int *data, int left, int right)
{

    if(left<right)
    {
        int cut = partition(data, left, right);
        if(cut>1)
        {
            quickSort(data, left, right);
        }
        if(cut+1<right)
        {
        quickSort(data, cut+1, right);
        }
    }
}

void quickSort(int *data, int length)
{
    quickSort(data, length-length, length-1);
}


void print_array(int array[], int size) //this function is to print the array after we finish sorting and we can use it before the sorting begin
{
    int j;
    for (j=0; j<size; j++)
    cout <<" "<< array[j]<<endl;

}//end of print_array

int main()
{
    const int size = 5;
    int arr[size]= {1, 17, 4, 6, 20};
    quickSort(arr, 0, size); 
    print_array(arr, size);
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

我认为主要问题在于:

No template was found. View could not be resolved for action "index" in class "Myvendor\Myext\ViewHelpers\Widget\Controller\PaginateController"

您在左/右之间反复调用该功能。也许你应该在这里使用if(cut>1) { quickSort(data, left, right); } 代替cut?实际上,将rightcut进行比较,然后就像使用left进行比较...

修复第一个问题后出现“损坏的堆栈”错误是因为right使用错误的参数调用quickSort函数 - 它应该是

main()

quickSort(arr, 0, size-1);

此外,重载函数中的quickSort(arr, size); // the overload handling the -1 表达式是编写length-length的相对复杂的方式。

您还可以将代码更改为实际将大小设置为0,但始终从right开始(这就是采用迭代器的std算法通常如何工作,允许通过right-1这是在最后一个数组项之后。)