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

时间:2011-04-14 23:33:49

标签: c++ sorting struct

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;
        }
    }
}

4 个答案:

答案 0 :(得分:2)

以下表达式在i == (listLength-1)时无效(假设listLengtharrayOfStructs中元素数量的计数):

arrayOfStructs[i+1]

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

arrayOfStructs[i+1]

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

可能会或可能不会导致崩溃。

答案 3 :(得分:0)

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

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

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

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