C++ 尝试使用cout打印循环中的数组时出错 #包括 #包括 int main(){ int n; 标准:cin>>n; int*a; 对于(int i=0;i>a[i]; } 对于(int i=0;i

C++ 尝试使用cout打印循环中的数组时出错 #包括 #包括 int main(){ int n; 标准:cin>>n; int*a; 对于(int i=0;i>a[i]; } 对于(int i=0;i,c++,arrays,cout,C++,Arrays,Cout,您需要为a分配内存,否则程序的行为是未定义的。写入 int*a=newint[n]; 完成所有操作后,将添加到它,然后是delete[]a;(将其放在return 0;之前) 或者,使用一个std::vector a(n);,所有内存分配都将由您负责。int*是指向int的指针,而不是数组。 要创建int的数组,例如:inta[100];-其中100是大小 此外,您还应使用: vec; 对于(int i=0;i!=n;++i){ 内部温度; cin>>温度; 向量安置(临时); } 尝试:int

您需要为
a
分配内存,否则程序的行为是未定义的。写入

int*a=newint[n];

完成所有操作后,将添加到它,然后是
delete[]a;
(将其放在
return 0;
之前)


或者,使用一个
std::vector a(n);
,所有内存分配都将由您负责。

int*
是指向int的指针,而不是数组。
要创建
int
的数组,例如:
inta[100];
-其中100是大小

此外,您还应使用:

vec;
对于(int i=0;i!=n;++i){
内部温度;
cin>>温度;
向量安置(临时);
}

尝试:int a[20];而不是int*a;

您的
a
没有指向任何有效内存,从而导致未定义的行为

您需要的是一个
std::vector

vector<int> vec;
for (int i = 0; i != n; ++i) {
    int temp;
    cin >> temp;
    vec.emplace_back(temp);
}
#包括
int n;
标准:cin>>n;
std::向量数;
对于(int i=0;i>val;
数字。推回(val);
}

因为(int i=0;i
int*a;
是一个指向整数的指针,它只是一个指向某个内存的指针,它本身没有分配内存。由于您在没有首先设置它的情况下解除对该指针的引用,编译器甚至应该给您一些警告,告诉您正在使用一个尚未初始化的变量

0xC0000005
Windows中的错误代码表示访问冲突。在这种情况下,您正试图写入一些您无权访问的内存

在读取或写入内存之前,需要先分配内存

如果您事先知道将有多少个条目,您可以进行静态内存分配,如果不知道,则需要进行动态内存分配

例如,如果您知道最多只需要20个条目,您可以轻松地将
int*a;
交换为
int a[20];

但是,由于您只知道程序运行时将有多少个条目,因此需要进行动态内存分配:
int*a=newint[n];

所以你的代码应该是

#include <vector>
int n;
std::cin>>n;
std::vector<int> numbers;
for (int i=0;i<n;i++){
    int val;
    std::cin>>val;
    numbers.push_back(val);
}
for(int i=0;i<n /* or numbers.size()*/ ;i++){
    std::cout<< numbers[i];
}
#包括
#包括
int main(){
int n;
标准:cin>>n;
int*a=新的int[n];
对于(int i=0;i>a[i];
}

对于(int i=0;i您的代码有一些问题。首先,您请求数字“n”,然后需要分配足够的空间来存储这么多整数

最好的方法是使用vector。您可以使用以下工具创建此工具:

#include <cstdio>
#include <iostream>

int main (){
    int n;
    std::cin>>n;
    int *a = new int[n];
    for (int i=0;i<n;i++){
        std::cin>>a[i];
    }
    for(int i=0;i<n;i++){
        std::cout<<a[i];
    }
    delete[] a; // Release allocated memory.
    return 0;
}
std::vector数字(n);
您也可以通过分配内存来创建它,但要等到您有了数据:

std::vector< int > numbers( n );
std::vector数字;
数量。储备(n);
您可能还应该验证您的输入,例如您的输入流(cin)如果用户输入的不是整数,则将无效,如果您要尝试创建该大小的向量,则原始的“n”应为正,并且您可能需要设置限制,否则您将遇到
错误。\u alloc
。如果您不介意遇到
错误,\u alloc
,您应该捕获该异常并打印错误例如“没有足够的空间分配尽可能多的数字”

当然,如果你输入一个很高的数字,比如1000万,你可能会发现编译器能够分配那么多,但是当你要求用户输入1000万次整数时,用户会对你的循环感到厌烦


你不需要
作为标题。你需要

你没有任何数组。
a
是一个指针,它不指向任何东西;试图索引它会导致未定义的行为。我建议不要在这里使用指针,如果你想在运行时确定大小,只需使用
std::vector
。哦,天哪,不要让这个家伙在阅读之前开始新东西。为什么是20?他要求一个数字,然后输入那么多整数。他应该使用vector。我认为上面的最后一个解决方案甚至比vector20更好,因为他不会手工输入超过20个整数来测试他的程序。
std::vector< int > numbers( n );
std::vector< int > numbers;
numbers.reserve( n );