gpt4 book ai didi

如果我顺序执行 for 循环而不是嵌套执行,C 代码会遇到意外的运行时错误

转载 作者:行者123 更新时间:2023-11-30 20:09:27 25 4
gpt4 key购买 nike

完整代码here 。初始问题here .

出于某种原因,此代码运行完美:

for (int i = n - 2; i > -1 ; i--)
{
if (strcmp(s[i], s[i + 1]) < 0)
{
k = i;
for (int j = n - 1; j > k; j--)
{
if (strcmp(s[k], s[j]) < 0)
{
l = j;
swap(s, k, l);
reverse_sequence(s, k + 1, n - 1);
return 1;
}
}
}
}

return 0;

用中断替换内部 for 并将其写在第一个 for 之后,如下所示:

for (int i = n - 2; i > -1 ; i--)
{
if (strcmp(s[i], s[i + 1]) < 0)
{
k = i;
break;
}
}
for (int j = n - 1; j > k; j--)
{
if (strcmp(s[k], s[j]) < 0)
{
l = j;
swap(s, k, l);
reverse_sequence(s, k + 1, n - 1);
return 1;
}
}
return 0;

遇到运行时错误。两者都正确打印排列。

这里到底发生了什么?

编辑:如果我添加

if (i == 0 && k == -1)
return 0;

在第一个循环中的 if 之后,它的行为符合预期。所以很明显,发生的情况是它将 s[-1](k 初始化为 -1)与某些东西进行比较,然后崩溃。

最佳答案

你的问题的根源是当 if (strcmp(s[i], s[i + 1]) < 0)始终为 false,您的嵌套循环行为正确(内部 for 循环未执行),但连续的 for 循环将触发错误,因为以下 for 将以等于 -1 的“k”值执行(因为您假设你用 -1) 初始化 k,你将进行一次出局数组访问 (str[-1])。

您添加的用于修复连续 for 循环的 if 条件正是第一个嵌套循环隐式执行的操作:如果未找到,则不执行任何操作。

关于如果我顺序执行 for 循环而不是嵌套执行,C 代码会遇到意外的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52076961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com