更改符号后我的代码停止工作

我是指针和数组的新手。我将不胜感激任何帮助。

我正在尝试编写矩阵乘法代码。首先,我的代码如下所示:


#include <stdio.h>
#include <stdlib.h>


void populate (int inp_row,int inp_col,int *arr);
void multiplication(int *arr1,int *arr2,int *arr3,int inp_row,int inp_col);
void display(int *arr,int inp_row,int inp_col);

int main(){

srand(time(NULL));

int row,col;

printf("Enter number of rows: ");
scanf("%d",&row);

printf("Enter number of collumns: ");
scanf("%d",&col);

int*arrA=(int *)malloc(row*col*sizeof(int));
int*arrB=(int *)malloc(row*col*sizeof(int));
int*arrC=(int *)malloc(row*col*sizeof(int));

populate(row,col,arrA);
populate(row,col,arrB);

multiplication(arrA,arrB,arrC,row,col);

printf("Your Matrices are as follows:\n=============================");

printf("\nMatrix A is as follows:\n");

display(arrA,row,col);

printf("\nMatrix B is as follows:\n");

display(arrB,row,col);

printf("\nResults:\n=============================");

printf("\nA * B is as follows:\n");

display(arrC,row,col);


}

void populate (int inp_row,int inp_col,int *arr){

int i,j;

for(i=0;i<inp_row;i++)
    for(j=0;j<inp_col;j++)
        *(arr + inp_row*i + j)=rand()%11;}

void multiplication(int *arr1,int *arr2,int *arr3,int inp_row,int inp_col){

int i,j,k;

for(i=0;i<inp_row;i++)
    for(j=0;j<inp_col;j++)
        *(arr3 + inp_row*i + j)=0;

for(i=0;i<inp_row;i++)
    for(j=0;j<inp_col;j++)
        for(k=0;k<inp_col;k++)
            *(arr3 + inp_row*i + j)=(*(arr1 + inp_row*i +k)*(*(arr2 + inp_row*k + j))+*(arr3 + inp_row*i + j));}



void display(int *arr,int inp_row,int inp_col){

int i,k;

for(i=0;i<inp_row;i++){
    printf("\n|");printf("%d",*(arr + inp_row*i + 0));
    for(k=0;k<(inp_col-1);k++)
        printf("  %d",*(arr + inp_row*i + k));
    printf("|");}}

打印看起来不错,但并没有停止工作。唯一的问题似乎是数学。乘法给出了错误的答案。我看了一些在线资源,我认为我的算法看起来还不错。然后,我基本上开始修改代码了。

我翻阅了我的讲义,并更改了数组符号并添加了内存分配错误消息。

现在,代码在询问输入后停止工作,我似乎无法理解。

对于动态数组的这种表示方式我也很陌生。通常,我像以前的代码一样编写它们。这可能是问题所在。

#include <stdio.h>
#include <stdlib.h>


void populate (int inp_row,int inp_col,int **arr);
void multiplication(int **arr1,int **arr2,int **arr3,int inp_row,int inp_col);
void display(int **arr,int inp_row,int inp_col);

int main(){

srand(time(NULL));

int row,col;

printf("Enter number of rows: ");
scanf("%d",&row);

printf("Enter number of collumns: ");
scanf("%d",&col);

int**arrA=(int **)malloc(row*sizeof(int));
int**arrB=(int **)malloc(row*sizeof(int));
int**arrC=(int **)malloc(row*sizeof(int));

if(arrA == NULL || arrB == NULL|| arrC == NULL){
    printf("\nCouldn't allocate the memmory!");
    return -1;}

int i;
for(i=0;i<col;i++){
    arrA[i]=(int*)malloc(sizeof(int)*col);
    arrB[i]=(int*)malloc(sizeof(int)*col);
    arrC[i]=(int*)malloc(sizeof(int)*col);
    if(arrA[i] == NULL || arrB[i] == NULL|| arrC[i] == NULL){
        printf("\nCouldn't allocate the memmory!");
        return -2;}}

populate(row,col,arrA);
populate(row,col,arrB);

multiplication(arrA,arrB,arrC,row,col);

printf("Your Matrices are as follows:\n=============================");

printf("\nMatrix A is as follows:\n");

display(arrA,row,col);

printf("\nMatrix B is as follows:\n");

display(arrB,row,col);

printf("\nResults:\n=============================");

printf("\nA * B is as follows:\n");

display(arrC,row,col);


}

void populate (int inp_row,int inp_col,int **arr){

int i,j;

for(i=0;i<inp_row;i++)
    for(j=0;j<inp_col;j++)
        arr[i][j]=rand()%11;}

void multiplication(int **arr1,int **arr2,int **arr3,int inp_row,int inp_col){

int i,j,k,sum=0;

for(i=0;i<inp_row;i++)
    for(j=0;j<inp_col;j++)
        arr3[i][j]=0;

for(i=0;i<inp_row;i++)
    for(j=0;j<inp_col;j++)
        for(k=0;k<inp_col;k++){
            sum+=arr1[i][k]*arr2[k][j];}
        arr3[i][j]=sum;}



void display(int **arr,int inp_row,int inp_col){

int i,k;

for(i=0;i<inp_row;i++){
    printf("\n|");printf("%d",arr[i][0]);
    for(k=0;k<(inp_col-1);k++)
        printf("  %d",arr[i][k]);
    printf("|");}}

评论