0
int arr2[5]={5,4,3,2,1};
sortArray(arr2, 5);

void sortArray(int data[], int size)
{
    int i, j;
    int element;

    for (i = 1; i < size; i++)
    {
        element = data[i];
        j = i-1;

        while (j >= 0 && element < data[j])
        {
            data[j+1] = data[j];
            j--;
        }

        data[j] = element;
    }
}

我的函数出现此错误,当函数结束时,我的数组看起来像 {5,5,5,5,5},为什么会这样?

4

1 回答 1

1

如上所述:在 for 循环的第一次迭代期间,执行 while 循环后,j 递减为 -1,然后用作数据数组中的索引;这是堆栈损坏的原因。

有关堆栈损坏的更多信息:当您引用数组的某个索引(IE data[j])时,您基本上是在说“从名为 data 的指针指向的内存位置开始,添加 j * sizeof(int ) 字节,并获取该值'。

在代码中,data[j]等价于*(data + (j * sizeof(int))). 当你给出一个负值时,你引用了没有分配给数据数组的内存;在这种情况下,内存恰好是堆栈的一部分。因为您正在修改它,所以您会收到堆栈损坏错误。

于 2012-12-14T00:08:29.157 回答