gpt4 book ai didi

c++ - 尝试对对象数组进行排序时程序终止

转载 作者:太空狗 更新时间:2023-10-29 23:48:55 24 4
gpt4 key购买 nike

我有一个名为 ContactInfo,其结构如下所示:

class ContactInfo
{
private:
string contactName;
string contactNumber;

public:
ContactInfo()
{
contactName = "";
contactNumber = "";
}
//setter and getters
};

我有一个函数可以创建一个 ContactInfo 数组并通过用户输入填充它。填充数组后,它将被传递给另一个对其进行排序的函数,该函数的编写如下所示。

void sortListByName(ContactInfo contactList[], int listSize)
{
for(int i = 0; i < listSize; i++)
{
for(int j = i+1; j < listSize+1; j++)
{
if(contactList[i].getContactName() > contactList[j].getContactName())
{
ContactInfo temp = contactList[j];
contactList[i] = contactList[j];
contactList[j] = temp;
}

}
}
}

主要方法

int main()
{
...

int n;//array size
ContactInfo *newList = contactList(n);//populates the array.
sortListByName(newList, n);

...
}

问题是程序会在排序发生之前终止并产生错误:

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid

最佳答案

查看内循环的上限。请注意,我们可以使 j 等于最后一次迭代的数组大小。

在 C++ 中,大小为 N 的数组的元素索引从 0N-1。在您的情况下,您试图访问数组末尾之后的元素,并且遇到了 Undefined Behaviour .确保您的索引在数组的范围内。

其次,您应该使用 std::vector无论如何都尽可能在原始数组上。

三、标准库提供std::sort算法,它几乎总是比你已经实现的冒泡排序更快。

关于c++ - 尝试对对象数组进行排序时程序终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50272491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com