为什么这种结构排序会使我的程序崩溃?

问题描述

|
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;
更具体地说,“ 11”部分。如果您的
for
循环从零运行到runs5 runs,则在最后一次迭代中,您将尝试访问超出实际范围的一个元素。 您可以使用
i < listLength - 1
来解决问题,或者仅在循环内使用
if
语句。更改条件可能是更好的做法。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...