arrays - 将二维数组传递给 C 中的函数
问题描述
我正在尝试创建一个函数,在给定变量名称和行数和列数(在本例中为 n)的情况下初始化随机二维方阵。此代码返回“分段错误”错误,我不知道为什么。我尝试在函数 initM 中的 if-else 中使用 &,但随后返回“错误:需要左值作为赋值的左操作数”有人知道如何使其工作吗?
void initM (int n, int **matrix){
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
if (i == j) matrix[i][j] = 101;
else matrix[i][j] = (rand() % 101);
}
}
}
void main (int argc, char *argv[]){
int n = atoi(argv[1]);
int **matrix = (int **)malloc(n*sizeof(int));
for(int i = 0; i < n; i++) matrix[i] = (int *)malloc(n*sizeof(int));
initM(n, matrix);
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
printf("%d ", matrix[i][j]);
}
printf("\n");
}
for (int i = 0; i < n; i++) free(matrix[i]);
free(matrix);
}
解决方案
int **matrix = (int **)malloc(n*sizeof(int));
它应该是
int **matrix = malloc(n*sizeof(int*));
在您的架构中,它会发生这种情况sizeof(int)
并且sizeof(void*)
没有相同的值。
无需转换 malloc 的输出,因为 void* 可以正确地表现为任何其他指向对象的指针。
推荐阅读
- node.js - Node.js 如何在资源有限的系统上调度 Workers
- javascript - 在同一页面上将 Javascript 数据存储到 PHP
- azure-devops - 尝试将 GitLab 存储库导入 Azure 存储库,但出现以下错误
- javascript - 角块重复自身
- r - 在我的 Rshiny 输出底部收到 FALSE 消息
- python - 当 num_of_stages: 1 (RPN only) in tensorflow object-detection api 时,导出推理图会出错
- selenium-webdriver - 将浏览器版本添加到 pytest-html 报告
- python - Spyder 在后台空转时崩溃
- if-statement - 将 if-elif-else-if-else 条件结构简化为单个 if-else
- jquery - jQuery.ajax 网址:rails