传递多维数组时出现分段错误,c++; 我对C++编程很陌生,所以我很抱歉如果这个问题有一个非常简单的答案。我试图创建一个从-1到1的随机数矩阵。以下是我正在使用的两个功能: #include <iostream> #include "matrix_fill_random.cpp" using namespace std; int main(int argc, int argv[]){ int n1, n2, n3; if (argc != 4) { cerr << "This program requires 3 argument!" <<endl; return 1; } else{ n1 = argv[1]; n2 = argv[2]; n3 = argv[3]; double** a; matrix_fill_random(n1, n2, a); return 0; } } #包括 #包括“矩阵\u填充\u随机.cpp” 使用名称空间std; int main(int argc,int argv[]){ int n1、n2、n3; 如果(argc!=4){ 瑟尔
将未初始化的指针传递多维数组时出现分段错误,c++; 我对C++编程很陌生,所以我很抱歉如果这个问题有一个非常简单的答案。我试图创建一个从-1到1的随机数矩阵。以下是我正在使用的两个功能: #include <iostream> #include "matrix_fill_random.cpp" using namespace std; int main(int argc, int argv[]){ int n1, n2, n3; if (argc != 4) { cerr << "This program requires 3 argument!" <<endl; return 1; } else{ n1 = argv[1]; n2 = argv[2]; n3 = argv[3]; double** a; matrix_fill_random(n1, n2, a); return 0; } } #包括 #包括“矩阵\u填充\u随机.cpp” 使用名称空间std; int main(int argc,int argv[]){ int n1、n2、n3; 如果(argc!=4){ 瑟尔,c++,multidimensional-array,segmentation-fault,C++,Multidimensional Array,Segmentation Fault,将未初始化的指针a传递给函数,该函数尝试初始化二维数组的元素: a[i][j]=num; 调用未定义的行为。最简单的解决方案是分配一个足够大的内存块来容纳矩阵: double* a = new double[rows * cols]; matrix_fill_random(n1, n2, a); delete[] a; a = NULL; ... // accessing element a[i][j] in the function's body: a[i*cols + j] = num
a
传递给函数,该函数尝试初始化二维数组的元素:
a[i][j]=num;
调用未定义的行为。最简单的解决方案是分配一个足够大的内存块来容纳矩阵:
double* a = new double[rows * cols];
matrix_fill_random(n1, n2, a);
delete[] a;
a = NULL;
...
// accessing element a[i][j] in the function's body:
a[i*cols + j] = num;
但最合理的解决方案是使用std::vector
,而不是C型数组
double** a;
您尚未为指针分配内存,因此每次使用操作符[]
取消引用指针时,都会出现未定义的行为
在通过函数传递之前,您应该分配一次a
double** a = new double*[n1];
再次在函数的for循环中:
for (int i = 0; i < n1; i++)
{
a[i] = new double[n2];
for (int j = 0; j < n2; j++)
{
double num = rand() % 2 - 1;
a[i][j] = num;
}
}
为
a
分配内存。尚未为a分配内存。请将语句double**a;
更改为
double** a = new double[n1];
并按如下方式更改循环
for (int i = 0; i < n1; i++)
{
//Every row will be of size = number of columns.
a[i] = new double[n2];
for (int j = 0; j < n2; j++)
{
double num = rand() % 2 - 1;
a[i][j] = num;
}
}
for(int i=0;i
在将内存传递给矩阵\u fill\u random()之前,需要将内存分配给a
double** a = new double[n1];
<> P>因为使用C++,否则应该考虑使用.<代码> > MatRXXFILYRADION/<代码>将值赋值给<代码> A[i][j]< /Cord>。但是,您没有为<代码> A< <代码>分配任何内存。第二个参数为“代码>主< /代码>是<代码> char *Agv[]代码< >代码><代码> >这将导致您的<代码> N1=ARGV(1)< /代码>编译失败(它应该是无效的)。您需要将代码> > ARGV(1)< /C> >。同样地,对于其他n’。如果使用C++不使用普通的C数组(除非您必须)。请选择STD::VoCur.没有人看到这一点?<代码>包含“MatrxFiLyAdvas.CPP”。
应该是.h
或.hpp
@pyCthon我看到了它,它工作正常(函数,不产生错误)。它违反了惯例。好吧,我知道这是如何为a分配内存的,这样我就可以给它分配一些东西,我也知道在它进入矩阵\u fill\u random和循环之前,你是如何做到的。但是我在double**a=new double[n1]这一行遇到了一个错误
。谢谢你指出这一点。:)是的,似乎已经解决了。谢谢你的帮助。是的,很抱歉,这里是一个新来的地方。
double** a = new double[n1];
for (int i = 0; i < n1; i++)
{
//Every row will be of size = number of columns.
a[i] = new double[n2];
for (int j = 0; j < n2; j++)
{
double num = rand() % 2 - 1;
a[i][j] = num;
}
}
double** a = new double[n1];