[英]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.