C++ 我不能动态声明向量数组

C++ 我不能动态声明向量数组,c++,memory,vector,segmentation-fault,new-operator,C++,Memory,Vector,Segmentation Fault,New Operator,我的目的是创建一个邻接列表来表示一个图形,我选择了使用向量。我的问题是,图的顶点和边的数量并不总是相同的,它是在输入中给定的。因此,我尝试动态地声明向量数组。这是我的代码(其中N表示边数): intn; 向量*arr; arr=新向量[N]; cin>>N` 每次我试图处理一个向量(igarr[0]。推回(3);)时,我都会遇到一个分段错误。我做错了什么:( 编辑:N代表节点的数量,而不是边的数量。这不影响分割错误,只影响用向量表示图形的方式。如果需要动态N,可以使用向量而不是数组: std:

我的目的是创建一个邻接列表来表示一个图形,我选择了使用向量。我的问题是,图的顶点和边的数量并不总是相同的,它是在输入中给定的。因此,我尝试动态地声明向量数组。这是我的代码(其中N表示边数):

intn;
向量*arr;
arr=新向量[N];
cin>>N`
每次我试图处理一个向量(ig
arr[0]。推回(3);
)时,我都会遇到一个分段错误。我做错了什么:(


编辑:N代表节点的数量,而不是边的数量。这不影响分割错误,只影响用向量表示图形的方式。如果需要动态
N
,可以使用向量而不是数组:

std::向量arr(N);
arr[42]。推回(42);

另外,请确保您的
N
变量已初始化,否则您将在
arr
上遇到越界访问,这可能是SEGFULT的原因。

如果您需要动态
N
可以使用向量而不是数组:

std::向量arr(N);
arr[42]。推回(42);

也要确保你的<代码> n>代码>变量初始化,否则你会遇到一个在ARR上的越界访问,这可能是SeaFult.的原因。

你几乎在那里;但是你在使用它之后读n。一个C++程序逐行执行,所以当谈到<代码>新矢量[n]时<代码> N>代码> N>代码不使用,在C++语言中,C++与大多数其他语言不同,编写一个无意义的程序非常容易,编译器不会阻止你(虽然它可能会发出警告-注意那些!) 如果您将
cin>>N;
移动到
新向量[N]
之前,那么它会工作得更好,但请稍候,有更好的解决方案

与原始数组相比,使用向量向量更为惯用。这样更安全,也更容易:

std::vector<std::vector<int>> arr;
int n;
cin >> n;
arr.resize(n);

<>你几乎在那里,但是你在使用它之后读n。一个C++程序逐行执行,所以当谈到<代码>新矢量[n]时<代码> N>代码> N>代码不使用,在C++语言中,C++与大多数其他语言不同,编写一个无意义的程序非常容易,编译器不会阻止你(虽然它可能会发出警告-注意那些!) 如果您将
cin>>N;
移动到
新向量[N]
之前,那么它会工作得更好,但请稍候,有更好的解决方案

与原始数组相比,使用向量向量更为惯用。这样更安全,也更容易:

std::vector<std::vector<int>> arr;
int n;
cin >> n;
arr.resize(n);

首先,在用户输入值之前,您正在使用
N
。其次,为什么要尝试使用
new[]
在这里吗?如果需要动态大小,只需使用
向量即可。在调用
new
之前,是否确定正在初始化
n
?发布给出错误的确切代码。既然您似乎熟悉
std::vector
为什么不使用它而不是
new[]
?您可以使用
std::vector
。首先,在用户输入值之前,您正在使用
N
。其次,为什么要尝试使用
new[]
在这里吗?如果需要动态大小,只需使用
向量即可。在调用
new
之前,是否确定正在初始化
n
?发布给出错误的确切代码。既然您似乎熟悉
std::vector
为什么不使用它而不是
new[]
?您可以使用
std::vector
。即使在编辑之后,它也不能解决实际问题OP有…OP有UB,因为在给定值之前使用了N。我假设
N
以某种方式有一些值…如果
N
没有初始化,那么您将有一个越界访问。这不是“越界访问”…为什么你要假设N有一个值,当在OPs代码中,它显然没有?在我的例子中,如果我没有明确说明,N没有初始化,它是作为文件的输入给定的。即使在你编辑之后,它也不能解决实际问题OP有…OP有UB,因为N在被给定值之前就被使用了。好吧,我是驴uming
N
在某种程度上有一些值……如果
N
未初始化,则您将拥有越界访问权限。这不是“越界访问”…为什么你要假设N有一个值,而在OPs代码中,它显然没有?在我的示例中,如果我没有明确说明,N没有初始化,它是作为文件的输入给出的。
int n;
cin >> n;
std::vector<std::vector<int>> arr(n);