c - 在 C 中分配一个二维整数数组
问题描述
我正在尝试在 C 中动态分配一个 2D INT 数组以返回一个转置矩阵,我已经对该主题进行了多项研究,它应该以这种方式工作,但是我一直在努力使用该程序。
我现在尝试了很多不同的方法(偏移量,指针算法),我没有找到解决问题的方法。
我要么得到垃圾值,要么程序崩溃(没有段错误,错误代码崩溃)。
我也在寻找一个合适的版本来分配内存,我在stackoverflow上看到了几个版本,我更喜欢使用的版本是分配指针空间和之后的整数空间(我正在尝试使用的那个)在下面的示例中)。
// Convert a matrix to it's transposed version. Returns a two dimensional array (pointer)
int **getTransposedMatrix(int *matrix, int dimension_h, int dimension_w){
int **transposedMatrix = (int **) malloc(dimension_w * sizeof(int*));
for(int row=0; row<dimension_w; row++){
transposedMatrix[row] = (int*) malloc(dimension_w * sizeof(int));
}
for(int row=0; row<dimension_h; row++){
for(int column=0; column<dimension_w; column++){
transposedMatrix[column][row] = *(matrix + row * dimension_w + column);
printf("%d ", transposedMatrix + (row * dimension_w + column));
}
printf("\n");
}
return **transposedMatrix;
}
我很感激任何帮助:)
解决方案
我不会打扰“二维数组”,例如您正在设置的那个,您在其中分别分配行。下面是我的版本,它使用单个数组并相应地计算其中的偏移量。
int *getTransposedMatrix(int *matrix, int dimension_w, int dimension_h)
{
int *transposed = malloc(dimension_w * dimension_h * sizeof(int));
for (int row = 0; row < dimension_h; row++) {
for (int col = 0; col < dimension_w; col++) {
transposed[col * dimension_h + row] = matrix[row * dimension_w + col];
}
}
return transposed;
}
推荐阅读
- java - Hibernate Proxy 未能成为真实对象?
- node.js - express.Router() 是否需要导出才能工作?app.use() 的第二个参数似乎无法硬编码,只有在导入时才有效
- node.js - 尝试使用多阶段构建将开发阶段图像与产品阶段构建分开
- javascript - Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'length')
- python - 如何在 google colab 中直接从 Yahoo Finance 导入 CSV 文件?
- trino - trino中如何将查询结果导出为csv格式
- javascript - 返回上一页而不是下一个 js 中的上一个 url
- mysql - 选择当月用户信息、房间名称、费用信息
- python - 如何从另一个 py 页面调用 netmiko ConnectHandler 并仅使用选择按钮执行它
- python - 无法使用请求从站点获取表格内容