C++ C++;分段断层
我读过关于分段错误的文章,但不明白为什么分段错误是由以下代码引起的C++ C++;分段断层,c++,segmentation-fault,C++,Segmentation Fault,我读过关于分段错误的文章,但不明白为什么分段错误是由以下代码引起的 #include<iostream> #include <stdlib.h> using namespace std; int main(){ int input; cout << "Enter length of desired array." << "\n"; cin >> input; int A [input]; //Populate
#include<iostream>
#include <stdlib.h>
using namespace std;
int main(){
int input;
cout << "Enter length of desired array." << "\n";
cin >> input;
int A [input];
//Populate and print the Array.
for(int i=0; i<sizeof(A); i++){
A[i] = rand()%99;
cout << A[i] << " ";
}
return 0;
}
#包括
#包括
使用名称空间std;
int main(){
int输入;
不能输入;
INTA[输入];
//填充并打印数组。
for(int i=0;isizeof
提供以字节为单位的大小。若要查找元素计数,请将以字节为单位的数组大小除以元素的大小:
for(int i=0; i < sizeof(A) / sizeof(A[0]); i++)
for(inti=0;i
基本上,您要做的是(在大多数系统上)将数组的大小写3倍,这会导致segfault。sizeof
运算符返回其参数的大小,以sizeof(char)的倍数表示
。在您的平台上,一个int
比一个char
大,因此您正在离开数组的末尾,这样做时会发生未定义(读起来非常糟糕)的事情。很高兴这只是一个seg错误。这里有几个问题:
sizeof(A)
返回以字节为单位的大小,而不是元素数。因此,您正在溢出数组。您需要将其除以每个元素的大小for(int i=0; i < input; i++){
for(int i=0;i
编辑:这里有一个不使用可变长度数组的解决方案:
int main(){
int input;
cout << "Enter length of desired array." << "\n";
cin >> input;
int *A = new int[input]; // Allocate
//Populate and print the Array.
for(int i=0; i<sizeof(A); i++){
A[i] = rand()%99;
cout << A[i] << " ";
}
delete[] A; // Free the allocated memory
return 0;
}
intmain(){
int输入;
不能输入;
int*A=newint[input];//分配
//填充并打印数组。
对于(int i=0;i您不应该使用new
和delete
关键字作为动态内存。我很惊讶这会编译为输入不是常量。要拥有可变长度数组,int A[input];
您必须手动分配它:
在C中:
inta*=malloc(input*sizeof(int));
完成后记得free(A);
在C++中:
int A*=new int[input];
完成后记得删除[]A;
。甚至不应该使用数组。
std::vector
有一个构造函数vector(大小)<代码> > <代码> n>代码>元素。< /p>正常情况下,C++中不能有一个可变大小的数组。哪个编译器是这个?我不知道输入是什么;CIN确实把数字转换成整数。int可能太大。我假设你已经确定输入确实是整数>0 C++(=C)。当代C++有两个构造函数:一个是代码>向量(sisixt n)和一个<代码>向量(siZeZT n,t>)< /> >没有多余的拷贝!CPAuxEng.com有点过时了。你的意思是“代码>向量(siZeZT n,t&t,alc&a=alOrthor))/>代码(参见矢量[CONS])(23.3.62).Strage,cppreference应该是最重要的…希望很快。不确定如何为该网站做出贡献。对不起,我是说cplusplus.com。cppreference很好而且更新了,我在我的~
中有一个它的本地副本,我使用它作为C++11合规性的主要文档。当然,当它与ISO 14882冲突时,ISO 14882将取代.V可变长度?抱歉,如果这看起来很愚蠢,我将从java中移动。可变长度数组意味着一个数组,它没有在编译时可以确定的大小。在这种情况下,数组的大小是在运行时从用户输入确定的。因此,它是一个可变长度数组。那么C++中我该怎么做呢?vector
使用new
对int
数组进行分类或分配(请确保稍后使用delete
释放),搜索确切语法应该很容易。