C++ 字符串下标超出范围-字符串冒泡排序

C++ 字符串下标超出范围-字符串冒泡排序,c++,arrays,bubble-sort,C++,Arrays,Bubble Sort,第一篇文章在这里,但我一直在挖掘这个错误的解决方案。 我收到一个错误“字符串下标超出范围” PhoneBook是类联系人对象指针的数组 static const int maxSize = 10; Contact* phoneBook[maxSize]; //array of contact pointers 其中联系人定义为 class Contact { public: Contact(); std::string firstName; std::string l

第一篇文章在这里,但我一直在挖掘这个错误的解决方案。 我收到一个错误“字符串下标超出范围”

PhoneBook是类联系人对象指针的数组

static const int maxSize = 10;
Contact* phoneBook[maxSize]; //array of contact pointers
其中联系人定义为

class Contact
{
public:
    Contact();

    std::string firstName;
    std::string lastName;
    std::string name; //lName + fName
    std::string phoneNumber;
    std::string address;
};
这是我的冒泡排序函数

void AddressBook::bubbleSort(Contact phoneBook[], int length)
{
Contact temp; 

for (int i = 0; i < length; i++)//for n-1 passes
{
    for (int j = 0; j < length - 1; j++)
    {
        if (phoneBook->name[j] > phoneBook->name[j + 1])
        {
            temp = phoneBook[j];
            phoneBook[j] = phoneBook[j + 1];
            phoneBook[j + 1] = temp;
            }

        }
    }
}
事实上,我知道问题源于bubbleSort函数,因为当我在addContact()中注释它时,它可以正常工作

这是我的错误的图片

完整代码

h

.cpp

来源
这几乎是一个打字错误。而不是索引中的
名称
字符串

    if (phoneBook->name[j] > phoneBook->name[j + 1])
您想为电话簿编制索引

    if (phoneBook[j].name > phoneBook[j + 1].name)

射击如此接近。谢谢不过,我确实收到了另一个错误,这次抛出了未处理的异常:读取访问冲突_右_数据为0xCCCD04。(错误和bubbleSort在文章中更新)@TylerLe 0xCCCD04看起来很像未初始化的内存(请参阅)加上结构中成员变量的偏移量。很有可能你从堆栈末尾的某个地方跑出来,试图访问指针。我刚刚查看了你对问题的编辑,几秒钟后我将回滚它。以使现有答案无效的方式更改问题是一种不好的形式。当一个解决方案暴露出一个新问题时,您最好先调试一段时间,看看是否可以解决它,如果不能解决,最好再问一个新问题。哦,对不起,我不知道。不用担心。我还没来得及完成我的想法就分心了。您的新错误使程序在
std::string
中的某个地方崩溃。由于每天使用std::string
std::string
的用户数量之多,错误发生的几率几乎为零。如果您往下看VisualStudio的底部,您会发现一个调用堆栈选项卡。单击该按钮,您将看到程序是如何到达崩溃现场的。一直往回走,直到找到0xCCCC的来源。然后你可能需要做更多的工作来了解它是如何到达那里的。可能是一个越界数组访问。
    if (phoneBook->name[j] > phoneBook->name[j + 1])
    if (phoneBook[j].name > phoneBook[j + 1].name)