c - 扫描到二维数组,然后将其传递给函数 - C
问题描述
如果我将函数分配为一维数组然后将其传递给函数,我的程序就会出现分段错误。它是为二维数组构建的。问题是,我不知道如何分配二维数组以及如何正确地将其传递给函数。希望一切都解释清楚。如果您知道出了什么问题,请尝试引导我以正确的方式修复它。非常感谢。这是代码:
int main()
{
int i, j, size;
scanf("%d", &size);
int *a;
//here i try to allocate it as 2d array
*a = (int *)malloc(size * sizeof(int));
for (i=0; i<size; i++)
{
a[i] = (int *)malloc(size * sizeof(int));
}
//here i scan value to 2d array
for (i = 0; i < size; i++)
for (j = 0; j < size; j++){
scanf("%d", &a[i][j]); }
//here i pass array and size of it into function
if (is_magic(a,size))
函数头看起来像:
int is_magic(int **a, int n)
解决方案
这不起作用:
*a = (int *)malloc(size * sizeof(int));
因为a
has typeint *
所以*a
有 type int
,所以给它分配一个指针是没有意义的。您还试图取消引用尚未初始化的指针,调用未定义的行为。
您需要定义a
为int **
:
int **a;
并在第一次分配时直接分配给它,sizeof(int *)
用于元素大小:
a = malloc(size * sizeof(int *));
另请注意,您不应强制转换malloc
.
推荐阅读
- python - 用 Python 替换 xlsx 文件中的字符
- flutter - 如何管理用户反馈?
- c - yacc 生成的解析器的新行被忽略
- snowflake-cloud-data-platform - 雪花雪管不工作,“executionState”:“STOPPED_MISSING_TABLE”
- postgresql - 在postgresql中从表名中选择属性名(表名)是什么意思
- javascript - 根据检查的输入使用 javascript 更改父样式
- r - R如何绘制预定义的集群?
- string - 在 FLUTTER/DART 中,为什么我们有时在声明一个变量的时候会在“String”后面加上一个问号?
- java - 我无法使用软键盘调整布局大小
- r - 转置我的 R 数据集以进行关联分析