首页 > 解决方案 > 编译 C 程序以使用 malloc() 和 free() 从 m×n 矩阵中查找重复值时出错

问题描述

所以我正在解决这个问题,我收到了这个错误

在此处输入图像描述

我的错误是什么?为什么说无效的参数类型?我犯了任何声明错误吗?我是新手,我还在努力学习这些。详细的解释会很有用

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

int main(void) {
  int m,n;
  printf("Input the number of Rows: ");
  scanf("%i", &m);
  printf("Input the number of Columns: ");
  scanf("%i", &n);

int *arr=(int*)malloc(m * sizeof(int));
    for(int i=0;i<m;i++)
    {
        arr[i] = (int*)malloc(n*sizeof(int));
    }

    printf("Populate Matrix Row by Row\n--------------------------\n");

    for(int i=0; i<m; i++){
        printf("Row [%i]\n--------\n",i);
        for(int j=0; j<n; j++){
            printf("At Col [%i]= ",j);
            scanf("%i", &*(*(arr+i) + j));
            printf("\n");
        }
    }
printf("[MATRIX]\n------------------\n");
  for(int i=0; i<m; i++){
    for(int j=0; j<n; j++){
      printf("%i ",*(*(arr+i) + j));
    }
    printf("\n");
  }
  printf("------------------\n");

printf("The duplicate value(s) are:\n");
  int temp_index=0;
  for(int i=0; i<m; i++){
    for(int j=0; j<n; j++){
      temp_index=j;
      for(int x=i; x<m; x++){
        for(int y=temp_index; y<n; y++){
           if(j!=y){
             if(*(*(arr+i) + j) == *(*(arr+x) + y)){
             printf("%i in position (%i, %i)\n",*(*(arr+i) + j),x,y);
           }
          }
        }
        temp_index=0;
      }
    }
  }

  free(arr);

  return 0;
}

标签: carraysmemorymalloc

解决方案


int *arr=(int*)malloc(m * sizeof(int));

*(*(arr+i) + j):*(arr+i)是 int,您正在尝试取消引用 int 值*(arr+i) + j。我想你会希望

int **arr = malloc(m * sizeof(int*));

如果您使用arr[i][j]而不是*(*(arr+i) + j).


推荐阅读