如何修复代码中的运行时错误(堆损坏)?

时间:2015-05-23 17:12:41

标签: c++ algorithm debugging runtime-error

这是基于本书(那不勒斯)中的算法的快速排序代码。结果是真的但在调试结束时它有一个运行时错误,我无法解决它。错误是堆损坏请帮我修复或改进它(如果它是错的)。谢谢你的所有答案。

#include <conio.h>
#include <iostream>
using namespace std;

int partition( int *A, int p, int q)
{
    int x = A[p];
    int i = p;
    for (int j = p+1; j <= q; j++)
    {
        if (A[j] <= x)
        {
            i++;
            swap (A[j],A[i]);
        }
    }
    swap (A[i],A[p]);
    return i;
}

void Quick_sort( int *A, int p, int r)
{
    int q;
    if( p<r)
    {
        q = partition(A,p,r);
        Quick_sort( A, p, q-1);
        Quick_sort( A, q+1, r);
    }
}

void main()
{
    int n;
    cout << "How many elements do you want to sort(quicksort)? ";
    cin >> n;
    int *A;
    A = new int [n];
    for (int k=0;k<n;k++)
    {
        cout << "A["<<k<<"]= ";
        cin >> A[k];
    }

    cout << endl;

    Quick_sort(A,1,n);

    cout << "\nsorted array: " <<endl;
    for (int i = 1; i < n+1; i++)
    {
        cout << A[i]<<"\t";
    }
    cout << endl;
    delete A;
}

问题是:为什么这段代码有错误?你在这看到多少错误?

2 个答案:

答案 0 :(得分:1)

你有一个所谓的“栅栏贴错误”,你的数组索引是一个。 行

A =(int *) malloc(n * sizeof(int));

for (int k=1;k<=n;k++)
{
    cout << "A["<<k<<"]= ";
    cin >> A[k];
}

可能导致错误,你用1而不是0开始索引。代码应该是

for (int k=0;k<n;++k)
{
    cout << "A["<<k<<"]= ";
    cin >> A[k];
}

请注意,在第二个for-loop

中也有相同的错误

答案 1 :(得分:0)

代码应为:for (int k=1;k<=n;k++)而不是for(int k=0;k<n;++k) 并且还改变了这一行: A = new int [n]; A = new int [n+1]; <div id="chatbox"> <div class="msg-box"> <label class="cnick">OtherUsers:</label> <br> <label class="cmsg">Some random text</label> <div class="cspc"></div> <br> </div> <div class="msg-box"> <label class="cnick">OtherUsers:</label> <br> <label class="cmsg">Some random text</label> <div class="cspc"></div> <br> </div> <div class="msg-box"> <label class="cnick">OtherUsers:</label> <br> <label class="cmsg">Some random text</label> <div class="cspc"></div> <br> </div> <div class="msg-box"> <label class="cnick">OtherUsers:</label> <br> <label class="cmsg">Some random text</label> <div class="cspc"></div> <br> </div> </div> 我调试它没有错误! 祝你好运