Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
传递多维数组时出现分段错误,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 - Fatal编程技术网

传递多维数组时出现分段错误,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];