【发布时间】:2020-12-12 02:02:33
【问题描述】:
以下面的代码sn-p为例,取n为9,数组a的元素为{5,5,4,5,5,5,4,5,6}。 Sublime 文本和 Visual Studio 代码显示正确的输出为 3,但 Leetcode 在线 ide 显示“运行时错误:索引 8 超出类型‘int [k]’的范围”。我想知道为什么 sublime text 和 visual studio code 没有显示运行时错误,如果有显示运行时错误的 ide/text 编辑器,请推荐给我。
int k = n - 1;
int temp[k];
for (int i = 0 ; i < k ; i++)
{
temp[i] = (a[i] - a[i + 1]);
}
int res = INT_MIN;
for (int i = 0 ; i < k ; )
{
int x = temp[i];
int c = 0;
while (x == temp[i])
{
i++;
c++;
}
res = max(res, c + 1);
}
cout<<res;
【问题讨论】:
-
您的代码具有未定义的行为,因此从技术上讲没有正确的输出(
a[i + 1]在最后一次迭代中超出范围)。显然,Leetcode 对数组进行边界检查。您需要找到具有该功能的编译器和运行时。您使用的编辑器无关紧要。 -
索引越界错误是导致未定义行为的错误示例。因为行为是未定义的,所以 Leetcode 和你的编译器都是正确的。您不应期望不良程序以可预测的方式运行。这是使 C++ 编程变得困难的原因之一。
标签: c++ visual-studio-code sublimetext3