我需要通过不将所有零存储在内存中来有效地存储下三角矩阵,所以我已经考虑过这种方式:首先我为每一行分配内存,然后为每一行分配i + 1个字节,所以我永远不会不得不担心零,但在第一次分配时出现问题.我究竟做错了什么?这是我的代码,编译器在读取矩阵的维度后,在第8行退出程序.
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i, j, **mat1, dim;
scanf("%d",&dim);
*mat1 = (int**)calloc(dim, sizeof(int*));
for(i = 0; i<dim; i++)
mat1[i] = (int*)calloc(i+1, sizeof(int));
for(i = 0; i < dim; i++)
for(j = 0; j < i+1; j++)
scanf("%d", &mat1[i][j]);
for(i=0; i<dim; i++)
for(j=0; j<(i+1); j++)
printf("%d%c", mat1[i][j], j != (dim-1) ? ' ' : '\n');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑
好吧,在你按照你帮助我的方式修改代码之后,我必须阅读一个上三角和下三角矩阵并显示他们的产品.这个问题是我没有将零存储在内存中,所以如果我使用传统的3-for算法,它会显示一些垃圾值.如果我用0初始化每个矩阵的其余部分,动态分配内存是没用的,因为我也会存储零,所以我没有做任何改进存储的效率.我想我必须在某处修改代码,或者可能是间隔,但无论如何我修改程序仍然输出(对于3x3矩阵)右上角的2个垃圾值.我怎么能这样做?
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int i,j,k,**mat1,**mat2,**prod,dim;
printf("Give dimension: \n"); …Run Code Online (Sandbox Code Playgroud)