不同的c++IDE会产生不同的结果
Different results in different c++ IDE
我在compileonline.com和Xcode中执行了相同的代码,我在Xcode中得到了错误的结果,但在compilenline.com 中得到了正确的结果
对于以下代码
#include <iostream>
using namespace std;
int main()
{
int n=0,i,x[n],y[n];
// insert code here...
cout << "Enter number of inputsn";
cin >> n;
for (i=0;i<n;i++)
{
cin >> x[i];
cin >> y[i];
}
//print x
for ( i=0;i<n;i++)
{
cout << x[i];
}
cout << "Test1";
//print y
for ( i=0;i<n;i++)
{
cout << y[i];
}
}
forhttp://www.compileonline.com/
输入:
1 5 6
输出:
输入输入的数量
5测试16
对于Xcode,
输入:
1 5 6
输出:
输入输入的数量
6测试16
int n=0,i,x[n],y[n];
这不会创建有效的数组。如果n
是0
,则得到0大小的数组。大小为0的数组在C++中是无效的,因此如果您的代码进行编译,其行为是不可预测的。您希望稍后读取n
并创建一个包含这么多元素的数组,但不能这样做。
相反,您应该首先读取n
,然后可以制作如下数组:
int *x = new int[n];
int *y = new int[n];
看起来compileonline
使用gcc
,据我所知,Xcode
使用gcc
或clang
,gcc和clang都支持flexible array member
,但据我从gcc
文档中所知:
灵活数组成员只能显示为结构的最后一个成员,否则该结构为非空
因此,这似乎不是一个有效的用途,如果您将代码更改为显式使用0
大小并使用-Wall -Wextra -pedantic
进行编译,您将看到类似于以下的消息:
警告:零大小数组是的扩展[-Wzero-length array]
所以我很困惑这是否有效,但你肯定是在通过访问数组边界之外的方法调用未定义的行为,所以你无法预测这段代码的结果。正确和有用的用途类似于gcc
文档中的示例:
struct line {
int length;
char contents[0];
};
struct line *thisline =
(struct line *) malloc (sizeof (struct line) + this_length);
thisline->length = this_length;
它在compileonline上工作很奇怪。
因为您的阵列x
和y
的大小是0
。在循环中,你试图设置每个数组的第i
个元素(它不存在),那么你就有了一个未定义的行为。
这是越界错误的一个很好的例子。
然而,在cpp中,std::vector
是首选(在大多数情况下):
#include <vector> // for std::vector
int n=0,i;
// ^ No x[n] and y[n]
cout << "Enter number of inputsn";
cin >> n;
std::vector<int> x(n); // Create a vector x of size n
std::vector<int> y(n); // Create a vector y of size n
通过您的输入查看这个实时示例。
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- C++:如何在CLion IDE中安装Boost
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- 为什么这个C++程序在代码::块和在线 IDE 之间返回不同的结果?
- 相同的代码在联机 IDE 和本地 IDE 中给出不同的结果
- 在C++中使用用户输入变量声明数组大小。不同的 IDE 会产生不同的结果?
- 如何确保程序在 IDE 具有输出结果后停止运行
- 不同的c++IDE会产生不同的结果
- LPSolve c++源库和IDE给出了不同的LP任务求解结果