c - 编译 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;
}
解决方案
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)
.
推荐阅读
- android - 如何从 Firebase 中删除 ViewPager 项目?
- python - 从具有任意长度值的字典创建数据框(使用回收的键作为列值)
- kubernetes - Kubernetes:哪些 Ingress Controller 可以在没有 TLS 的情况下用于 grpc 服务?
- visual-studio - 如何在 Visual Studio 中使用 OpenCV Nuget 包发布我的 C# 项目?
- delphi - 将一个 Tchart 分成相等的部分,然后在 Firemonkey 中在其上绘制矩形
- python-3.x - Glade GtkFileChooserDialog 正在选择文件夹和文件
- sql - 传递变量时将 datetime 转换为 varchar 不起作用
- ios - if else 使用三元
- python - 在python中解析和转换嵌套的xml
- c++ - 将两位数转换为低内存表示的最快方法