繁体   English   中英

为什么这个结构类崩溃了我的程序?

[英]Why is this struct sort crashing my program?

void sortAlphabetically(int listLength, contactInfo* arrayOfStructs)
{
    contactType temp;

    for (int i = 0; i < listLength; i++)
    {
        if (strcmp(arrayOfStructs[i].contactName, arrayOfStructs[i+1].contactName) > 0)
        {
                     temp = arrayOfStructs[i];    //swapping entire struct
                     arrayOfStructs[i] = arrayOfStructs[i+1];
                     arrayOfStructs[i+1] = temp;
        }
    }
}

下面的表达式是无效的,当i == (listLength-1)假设listLength是在元件的数量的计数arrayOfStructs ):

arrayOfStructs[i+1]

你应该迭代到listLength - 1 ,或者在引用arrayOfStructs[i+1]之前检查你是不是在最后一个元素。

看起来你正在索引数组的边界:

arrayOfStructs[i+1]

我假设listLength是列表的长度,这意味着它比列表的最后一个元素多一个。 你对i < listLength条件保持i在界限范围内,但不是i + 1。

这可能会,也可能不会导致崩溃。

我相信这是因为以下几行:

arrayOfStructs[i] = arrayOfStructs[i+1];
arrayOfStructs[i+1] = temp;

更具体地说, i+1部分。 如果for循环从零运行到listLength - 1 ,则在最后一次迭代中,您将尝试访问超出实际范围的一个元素。

你可以使用i < listLength - 1来解决问题,或者只是在循环中使用if语句。 改变病情可能是更好的做法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM