Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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+创建大型2d动态阵列时出现分段错误(堆芯转储)+;_C++_Arrays_Segmentation Fault_Dynamic Arrays_Coredump - Fatal编程技术网

C++ 使用c+创建大型2d动态阵列时出现分段错误(堆芯转储)+;

C++ 使用c+创建大型2d动态阵列时出现分段错误(堆芯转储)+;,c++,arrays,segmentation-fault,dynamic-arrays,coredump,C++,Arrays,Segmentation Fault,Dynamic Arrays,Coredump,我正在尝试创建一个程序,创建两个二维动态数组,并将它们相乘,然后给出一个输出,并根据输入大小n计算相乘过程所需的时间。当输出小于7行和7列时,此代码有效,但当数字超过8时,会出现错误 using namespace std; int m1c , m1r , m2c , m2r , i , j , k , l; int** arr1 = new int*[m1c]; int** arr2 = new int*[m2c]; int** multArr = new int*[m1c]; int

我正在尝试创建一个程序,创建两个二维动态数组,并将它们相乘,然后给出一个输出,并根据输入大小n计算相乘过程所需的时间。当输出小于7行和7列时,此代码有效,但当数字超过8时,会出现错误

using namespace std;

int m1c , m1r , m2c , m2r , i , j , k , l;

int** arr1 = new int*[m1c];
int** arr2 = new int*[m2c];
int** multArr = new int*[m1c];

int main(){

    cout << "Enter the Number of rows for matrix 1 :";
    cin >> m1c;

    cout << "Enter the Number of columns for matrix 1 :";
    cin >> m1r;

    cout << "Enter the Number of rows for matrix 2 :";
    cin >> m2c;

    cout << "Enter the Number of columns for matrix 2 :";
    cin >> m2r;

    for (i = 0; i < m1r; i++) {
        arr1[i] = new int[m1c];
        multArr[i] = new int[m1c];
    }

    for (i = 0; i < m2r; i++) {
        arr2[i] = new int[m2c];
    }

    if (m1r != m2c) {
        cout << "Number of rows in the first matrix must be equal to the numbr of columns in the second matrix ";
        return -1;
    }


    for (i = 0; i < m1r; i++) {
        for (j = 0; j < m2c; j++) {

            arr1[i][j] = rand() % 100;
        }
    }

    for (i = 0; i < m2r; i++) {
        for (j = 0; j < m2c; j++) {

            arr2[i][j] = rand() % 100;
        }
    }


    //Displaying the two arrays

    for (i = 0; i < m1r; i++) {
        for (j = 0; j < m1c; j++) {
            cout << arr1[i][j] << " ";
        }
        cout << endl;
    }

    cout << endl;

    for (i = 0; i < m2r; i++) {
        for (j = 0; j < m2c; j++) {

            cout << arr2[i][j] << " ";
        }
        cout << endl;
    }
    delete[] arr1;
    delete[] arr2;

    return 0;

}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使用名称空间std;
int m1c,m1r,m2c,m2r,i,j,k,l;
int**arr1=新int*[m1c];
int**arr2=新int*[m2c];
int**multArr=新int*[m1c];
int main(){
cout>m1c;
cout>m1r;
cout>m2c;
cout>m2r;
对于(i=0;icout初始化arr1时看起来像是一个错误。您使用m2c作为列计数。您可能是指m1c。

旁注:这有
std::vector
。只需使用
std::vector
即可。
int**arr1=new int*[m1c]此时
m1c
0
,因此分配了一个大小为零的数组。那么,
std::vector
对于大量数据(矩阵)的伸缩性不好,通常最好将
std::vector
封装在一个类中,该类执行如何按行和列索引寻址的逻辑。在接受其值之前,您将arr1和arr2分配给大小为m1c和m2c的类。更糟糕的是,您没有初始化m1c和m2c,因此它们可能包含垃圾。[IIRC,VS将在编译为调试时将其初始化为零,在编译为发布时将其保持未初始化状态。]访问超出分配范围的arr1和arr2元素可能是分段错误的原因。此外,内存泄漏-删除arr1和arr2,但不删除每个元素分配的内存。