尝试对结构数组使用选择排序

时间:2012-01-26 21:34:14

标签: c++ arrays struct exc-bad-access

我有一系列结构,我正在尝试使用选择排序按价格对其进行排序。我一直在收到ECX_BAD_ACCESS信号。

这就是我所拥有的:

#include <iostream>
#include <string>
using namespace std;

所以事情只是一个名称和价格的结构。价格是我想通过

对结构进行排序的
struct Thing
{
    std::string name;
    double price;
};

现在,main方法只是检查以确保sortThing函数正常工作。

Thing *sortThing(Thing input[], int size);

int main ()
{
    Thing *stuff = new Thing[3];

    stuff[0].name = "middle";
    stuff[0].price = 2.00;
    stuff[1].name = "last";
    stuff[1].price = 3.00;
    stuff[2].name = "first";
    stuff[2].price = 1.00;

    stuff = sortThing(stuff, 3);

    cout << stuff[0].name + " " + stuff[1].name + " " + stuff[2].name;

    return 0;
}

这就是问题所在。它抱怨我将输入[maxIndex] .name分配给output [i] .name的行,说:“Program Received'EXC_BAD_ACCESS'”

Thing *sortThing(Thing input[], int size)
{
    Thing *output = new Thing[size];
    Thing nullThing;
    nullThing.name = "&nullThing";
    int min = 0;
    int minIndex;

    for (int i = 0; i < size; i++)
    {

        for (int j = 0; j < size; j++)
        {
            if (input[j].name.compare("&nullThing") != 0 && input[j].price <= min) minIndex = j;
        }
        output[i].name = input[minIndex].name;
        output[i].price = input[minIndex].price;
        input[minIndex] = nullThing;
        minIndex = 0;
        min = 0;
    }

    return output;
}

感谢任何帮助

2 个答案:

答案 0 :(得分:2)

我认为您确定minIndex的循环不正确...由于所有价格都是&gt; = 0,您永远不会设置minIndex,因为您从未初始化它,它的值可以是任何值。在您的情况下,最有可能的是,该值超出了数组的范围,并且实际上有一个数组超出范围的错误。

可能想要研究一些排序算法。

答案 1 :(得分:0)

调试101:这是第一件事。变化:

int minIndex;

为:

int minIndex = -42;

(暂时)然后在内循环后立即输出minIndex的值。

这将显示该值未被更改。

原因未被更改是min的初始设置。除非您免费赠送产品,或付钱给人们取走产品,否则价格总是大于零,而if声明的第二部分将始终为假。

快速修复,最初将min设置为INT_MAX(以及在外循环结束时将其重置的位置)。