arrays - C不打印二维动态数组内容
问题描述
我正在尝试制作一个计算 4 或 9 个数字的行列式的二维动态数组。
虽然使用指针和动态数组在一维数组中完美地工作,但我无法理解我必须做什么才能使其在二维中运行。到目前为止,程序可以正确编译并接收输入。但是,它不打印任何内容。我什至尝试打印单个单元格内容。没有什么。
这是代码:
#include <stdio.h>
#include <stdlib.h>
int size; int i; int j; int **arDet; int a; int b; int c; int d; int e; int f; int g; int h;
int input()
{
do
{
scanf("%d", &size);
}while(size > 3 || size < 2);
arDet = (int**)malloc(sizeof(int)*size);
for(i = 0 ; i < size; i++)
{
for(j = 0 ; j < size; j++)
{
scanf("%d", &arDet[i][j]);
}
}
}
int main()
{
input();
if(size == 2)
{
printf("%d\n", arDet[0][0]*arDet[1][1] - arDet[0][1]*arDet[1][0]);
return 0;
}else if(size == 3)
{
// printf("%d", arDet[0]*(arDet[4]*arDet[8] - arDet[7]*arDet[5]) - arDet[1]*(arDet[3]*arDet[8] - arDet[5]*arDet[6]) + arDet[2]*(arDet[3]*arDet[7] - arDet[6]*arDet[4]));
return 0;
}else
{
return -1;
}
}
解决方案
- 您只分配了一个数组来存储指向每一行的指针。您必须分配数组来存储每行的值。
- 的尺寸计算
arDet
是错误的。的元素arDet
是int*
。int
在某些环境中(例如 4 个字节)的大小比int*
(例如 8 个字节)短,您的代码会在这种环境中造成问题。 - 不鼓励
malloc()
在 C 中转换结果。
arDet = malloc(sizeof(arDet[0])*size); /* fix size calculation */
for(i = 0 ; i < size; i++)
{
arDet[i] = malloc(sizeof(arDet[i][0]) * size); /* add this */
for(j = 0 ; j < size; j++)
{
scanf("%d", &arDet[i][j]);
}
}
另请注意,注释行
// printf("%d", arDet[0]*(arDet[4]*arDet[8] - arDet[7]*arDet[5]) - arDet[1]*(arDet[3]*arDet[8] - arDet[5]*arDet[6]) + arDet[2]*(arDet[3]*arDet[7] - arDet[6]*arDet[4]));
没有意义,因为 C 不支持将两个指针相乘,并且大于 2 的索引在 3 时超出范围size
。
推荐阅读
- acumatica - 超出 Acumatica API 登录限制
- c++ - 如何在不与接口交互的情况下调用 C++ Windows 桌面应用程序中的函数
- angular - 更改角度路由器 URL 方案
- android - 如何在毕加索中添加缓存功能?
- dart - Flutter 自定义范围滑块
- python - 将 sqlContext 数据帧转换为 pandas 数据帧时出错
- sql - 如何通过在函数/过程中传递两个值来返回多列
- spring-boot - 无法使用 Spring WebFlux 和 ReactiveCassandraRepository 编写自定义查询
- perl - 摘要::SHA 不能使用 sha512256_hex
- google-cloud-dataflow - 在 Python 中使用 Apache Beam/Dataflow 读取 UTF-16 csv