我需要做2个数组(arr1和arr2)的大小必须从值3-10只。为此,我将两个数组的范围都设置为var size(如代码所示)。但是,在输入arr1和arr2的值并打印它们之后,arr1的值变成了与arr2相同的值。
#include<iostream>
using namespace std;
int main()
{
int size, a = 0, b = 0, c = 0;
int arr1[size], arr2[size];
while(a = 1)
{
cout << "Enter desired size of the array: ";
cin >> size;
if(size >= 3 && size <= 10)
{
break;
}
a= 1;
}
cout<<"\nEnter value for Array 1: " << endl;
for(int i = 0; i < size; i++)
{
cin >> arr1[i];
}
for(int i = 0; i < size; i++)
{
cout << arr1[i];
}
cout<<"\nEnter value for Array 2: " << endl;
for(int i = 0; i < size; i++)
{
cin >> arr2[i];
}
for(int i = 0; i < size; i++)
{
cout <<"Array 1: " << arr1[i] << " Array 2: " << arr2[i] << endl;
}
}输出:
Enter desired size of the array: 3
Enter value for Array 1:
1
2
3
123
Enter value for Array 2:
5
4
3
Array 1: 5 Array 2: 5
Array 1: 4 Array 2: 4
Array 1: 3 Array 2: 3当我更改或设置我的arr2 (例如arr2[3])的范围时,这个问题就消失了。但是,我需要arr1和arr2具有相同的大小,并且大小必须来自用户。解决方案是什么?
发布于 2021-05-07 20:41:56
这是一段糟糕的代码:
int size;
int arr1[size], arr2[3]; 在定义数组时,未初始化大小。此外,即使它是,数组也将是可变长度数组,这确实是C语言的事情,但由于异常处理中的各种问题,它不是标准的C++。它们只被一些编译器接受为标准的扩展,主要是gcc和Clang。
根据您的编译选项,在定义时size可能为0。在这种情况下,编译器将在相同内存位置使arr1和arr2为0大小的数组。当然,使用它们中的任何一个都会引发未定义的行为。
创建大小仅在运行时已知的数组的正常方法是使用使用new[]分配的动态数组(稍后使用delete[]释放)
https://stackoverflow.com/questions/67435019
复制相似问题