尝试使用cout在循环中打印数组时出错
Error when trying to print out array in a loop using cout
#include <cstdio>
#include <iostream>
int main (){
int n;
std::cin>>n;
int*a;
for (int i=0;i<n;i++){
std::cin>>a[i];
}
for(int i=0;i<n;i++){
std::cout<<a[i];
}
return 0;
}
我刚开始解决一个问题,我想检查一下我是否知道如何读取和数组,并制作一个示例输出数组。当我包含第二个循环时,只要我输入n和第一个数字,程序就会崩溃,并显示以下消息
13
返回进程-1073741819 (0xC0000005)执行时间:4.943 s按任意键继续。
int *a;
是一个指向整数的指针,它只是一个指向一些内存的指针,它自己没有分配内存。由于您对指针a[i]
解引用而没有先设置它,您的编译器甚至应该给您一些警告,告诉您正在使用尚未初始化的变量。
0xC0000005
错误码在Windows下表示访问违规。在这种情况下,您正在尝试写入一些您无法访问的内存。
在你可以读或写内存之前,你需要分配内存。
如果你事先知道你将有多少项,你可以做静态内存分配,如果你不知道,那么你需要做动态内存分配。
例如,如果您知道最多只需要20个条目,那么您可以轻松地将int *a;
替换为int a[20];
。
但是由于您只知道程序运行时将有多少项,因此您需要使用动态内存分配:int *a = new int[n];
.
#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;
}
您需要为a
分配内存,否则程序的行为未定义。写
int* a = new int[n];
将执行它,当您完成所有操作时,后面跟着delete[] a;
(将此放在return 0;
之前)。
或者,使用std::vector<int> a(n);
,所有的内存分配将为您处理。
Try: int a[20];而不是int *a;
你的a
没有指向任何有效的内存,导致未定义的行为。
你需要的是一个std::vector
:
#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];
}
这会为您处理动态分配,这样您就不必自己做那些繁琐的事情了。
您的代码有几个问题。首先,您请求数字'n',然后需要分配足够的空间来存储这么多整数。
最好的方法是使用vector。您可以使用以下命令创建:
std::vector< int > numbers( n );
你也可以创建它,分配内存,但等待,直到你有数据:
std::vector< int > numbers;
numbers.reserve( n );
你可能还应该验证你的输入,例如你的输入流(cin)将无效,如果用户输入的不是整数,如果你要尝试创建一个这个大小的向量,原始的"n"应该是正的,你可能需要设置一个限制,否则你会遭受bad_alloc
。如果你不介意遭受bad_alloc
,你应该捕获该异常并打印一个错误,如"没有足够的空间来分配尽可能多的数字"。
当然,如果你输入一个大的数字,比如1000万,你可能会发现编译器能够分配这么多,但是当你让用户输入1000万次整数时,他会在循环中感到厌烦。
您不需要<cstdio>
作为标题。您将需要<vector>
和<iostream>
。
int*
是一个int型指针,而不是数组。
创建一个int
的数组,示例:int a[100];
—其中100是
此外,您应该使用std::vector<int>
来代替:
vector<int> vec;
for (int i = 0; i != n; ++i) {
int temp;
cin >> temp;
vec.emplace_back(temp);
}
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 在一定长度后从数组中打印时缺少整数
- 数组元素打印的递归方法
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 打印矢量数组中的所有元素
- 打印问题.我在数组中打印值时遇到一些问题
- 数组类 阵列的打印输出
- 动态分配的聊天数组打印缺失的数据和空
- 如何打印 2D 字符数组C++
- 如何修改代码以打印出数组 v2
- 在C++中初始化和打印 2D 数组
- 将浮点数转换为无符号字符数组并打印出来
- C++ 打印包含数据结构的数组
- 如何让字符数组在一行而不是多行中打印出来?
- 打印字符数组地址的正确方法
- 按字母顺序打印存储在字符数组中的信息
- 使用递归反转和打印出数组的内容
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 加载有空指针的字符数组的打印值