簡體   English   中英

嘗試對結構數組使用選擇排序

[英]Trying to use selection sort on an array of structs

我有一系列結構,我正在嘗試使用選擇排序按價格對其進行排序。 我一直在收到一個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;
}

任何幫助表示贊賞

我認為你確定minIndex的循環是不正確的...因為所有的價格都是> = 0,你永遠不會設置minIndex ,因為你從未初始化它,它的值可以是任何東西。 在您的情況下,最有可能的是,該值超出了數組的范圍,並且有效地使數組超出了界限誤差。

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

調試101:這是第一件事。 更改:

int minIndex;

至:

int minIndex = -42;

(暫時)然后在內循環后立即輸出minIndex的值。

這將顯示該值未被更改。

它沒有被改變的原因min的初始設置。 除非你免費贈送你的產品,或付錢讓人拿走它,否則價格總是大於零,而if語句的第二部分總是假的。

快速修復,最初將min設置為INT_MAX (以及在外部循環結束時重置它的位置)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM