为什么我插入前两个输入后此程序崩溃

问题描述 投票:-1回答:1

我必须在函数中进行动态分配(双指针),然后我必须在矩阵中放入一些数字,然后对其进行重新分配]]

我也尝试在第一个函数中写**矩阵而不是*(matrice [i]),因为我必须在第一个动态分配之后创建一个矩阵,但是它总是错误的,在这种情况下,程序会在i之后退出插入矩阵的第一行

#include <iostream>
#include <stdlib.h>

using namespace std;

void allocaMatrice(int *** matrice,int * r,int * c);
void leggiMatrice(int ** matrice,int r,int c);
void scriviMatrice(int ** matrice,int r,int c);
void deallocaMatrice(int ** matrice,int r);

int main (){
int **matrice;
    int r, c;
    allocaMatrice(&matrice,&r,&c);
    leggiMatrice(matrice,r,c);
    scriviMatrice(matrice,r,c);
    deallocaMatrice(matrice,r);

    cin.get();
    return 0;
}

void allocaMatrice(int *** matrice,int * r,int * c){
    cout<<"Dimmi il numero di righe della matrice"<<endl;
    cin>>*r;
    while(cin.get()!='\n');
    cout<<"Dimmi il numero di colonne della matrice"<<endl;
    cin>>*c;
    while(cin.get()!='\n');

    *matrice=(int **) calloc (*r,sizeof(int));

    for(int i=0;i<*c;i++){
        *matrice[i]=(int *) malloc ((*c)*sizeof(int));
    }   
}

void leggiMatrice(int ** matrice,int r,int c){
    for(int i=0;i<r;i++){
        for(int j=0;j<c;j++){
           cout<<"Dimmi l'elemeno alla riga e colonna corrente"<<endl;
            cin>>matrice[i][j];
            while(cin.get()!='\n');
        }
    }
}

void scriviMatrice(int ** matrice,int r,int c){

for(int i=0;i<r;i++){
    for(int j=0;j<c;j++){
        cout<<matrice[i][j]<<"\t";
    }
    cout<<endl;;
}

}

void deallocaMatrice(int ** matrice,int r){
    int i;
    for(i=0;i<r;i++){
       free((*matrice)+1);
    }
    free(matrice);
}

调试错误是“程序接收到的信号SIGSEGV,分段错误”

我必须在函数中进行动态分配(双指针),然后我必须在矩阵中放入一些数字,然后对其进行释放,我还尝试写**矩阵而不是*(matrice [i] )...

c++ crash malloc dynamic-memory-allocation double-pointer
1个回答
0
投票

© www.soinside.com 2019 - 2024. All rights reserved.