C高手帮忙看看
int **a;int i,m,n;
scanf("%d %d",&m,&n);
*a=(int **)malloc(m*sizepf(int *));
for (i=0;i<m;i++)
a=(int *)malloc(n*sizeof(int));
printf("Please input int matrix a[%d][%d]\n",m,n);
for(i=0;i<m;i++)
for(j=0;j<n;j++){
scanf("%d",&temp_a);
a(i,j)=temp_a;} 这里应该是方括号,显示不了,只能这样代替了.
free(a);
定义了动态2维数组,怎么给它赋值呢, 代码有什么问题吗.帮忙看看. 原帖由 maedebach 于 2007-12-9 12:24 发表 http://www.dolc.de/forum/images/common/back.gif
int **a;
int i,m,n;
scanf("%d %d",&m,&n);
*a=(int **)malloc(m*sizepf(int *));
for (i=0;i<m;i++)
a=(int *)malloc(n*sizeof(int));
printf("Please input int matrix a[%d][%d]\n",m,n);
fo ...
如果没有忘记C的话, 应该象下面那样:
int **a;
int i,j, m,n;
scanf("%d %d",&m,&n);
a=(int**)malloc(m*sizeof(int *));
for (i=0;i<m;i++)
a [ i ] = (int *) malloc(n*sizeof(int));
for (i=0;i<m;i++)
for (j=0;j<n;j++)
a [ i ] [ j ] = i+j;
[ 本帖最后由 kaiser0825 于 2007-12-9 13:24 编辑 ] 谢谢啦. 改了下,但是距阵乘积的结果还是抱错,即使是两个2x2同样维数的相乘.
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
int main(int argc, char** argv)
{
int **a;
int i,m,n,j,temp_a,k,temp_b,z;
printf("Angaben der Dimension von Matrix a m und n\n",m,n);
scanf("%d %d",&m,&n); /*dyn.array a mit */
a=(int**)malloc(m*sizeof(int*));
for (i=0;i<m;i++)
a=(int *)malloc(n*sizeof(int));
printf("Please input int matrix a[%d][%d]\n",m,n);
for(i=0;i<m;i++)
for(j=0;j<n;j++){
scanf("%d",&temp_a);
a=temp_a;}
free(a);
/**********************************************************/
int **b;
printf("Angaben der Dimension von Matrix b n und k\n",n,k);
scanf("%d %d",&k,&n);
b=(int**)malloc(k*n*sizeof(int*)); /*dyn.array mit b */
for (i=0;i<n;i++)
b=(int *)malloc(k*sizeof(int));
printf("Please input int matrix b[%d][%d]\n",n,k);
for(i=0;i<n;i++)
for(j=0;j<k;j++){
scanf("%d",&temp_b);
b=temp_b;}
free(b);
/**********************************************************/
int ab; /*Matrix multiplikation*/
for (i=0;i<m;i++)
for (z=0;z<k;z++)
for (j=0;i<k;j++)
ab+=a*b;
/***Ausgabe*****************************************************/
printf("\n");
printf("Ausgaben:",m,k);
for(i=0;i<m;i++){
printf("\n");
for(j=0;j<k;j++)
printf("%d ",ab);
}
return 0;
} 原帖由 maedebach 于 2007-12-9 13:30 发表 http://www.dolc.de/forum/images/common/back.gif
谢谢啦. 改了下,但是距阵乘积的结果还是抱错,即使是两个2x2同样维数的相乘.
#include
#include
#include
int main(int argc, char** argv)
{
int **a;
int i,m,n,j,temp_a,k,temp_b ...
int ab;
/* set ab = 0 firstly */
for (i=0;i<m;i++)
for (z=0;z<k;z++)
ab [ i ][ z ] = 0; 还是通不过去,郁闷. printf("Angaben der Dimension von Matrix a m und n\n",m,n);
scanf("%d %d",&m,&n);
这里也是printf里最后m,n的什么。。。M,N还没赋值呢。。。。
scanf("%d",&temp_a);
a=temp_a;}
A明明是2维数组,你这怎么写着写着变一维了?
同样问题也处在B和AB上,看了半天都只有ab
int ab;
这个地方也不能这么定义吧。。。。
[ 本帖最后由 klsharp 于 2007-12-9 20:05 编辑 ] 原帖由 maedebach 于 2007-12-9 13:30 发表 http://www.dolc.de/forum/images/common/back.gif
........a = (int *)malloc(n * sizeof(int));
a ist vom Typ her ein Double-Pointer, also ein Array von Pointer. Sprich der Compiler erwartet in jeder Speicherstelle ab **a eine Speicheradresse, die auf eine weitere Speicheraddresse vom Typ "integer" zeigt. Ergo waer hier richtig:*a = (int *)malloc(n * sizeof(int));
.....
for (j = 0; j < n; j++) {
scanf("%d", &temp_a);
a=temp_a;
.....
Du ueberschreibst eine Speicheradresse mit einem integer Value. richtig waere hier:
a=temp_a;free(a);
warum gibst Du den Speicherplatz frei, obwohl Du die Werte drin spaeter noch brauchst?
.........
b=(int *)malloc(k*sizeof(int));
printf("Please input int matrix b[%d][%d]\n",n,k);
for(i=0;i<n;i++)
for(j=0;j<k;j++){
scanf("%d",&temp_b);
b=temp_b;}
........
Hier machst Du den selben Fehler wie oben bei **a. Fix s.o.
int ab; /*Matrix multiplikation*/
for (i=0;i<m;i++)
for (z=0;z<k;z++)
for (j=0;i<k;j++)
ab+=a*b;
Hier machst Du den gleichen Fehler wie oben. **ab ist zweidimensional und sollte auch als solche behandelt werden. z.B.
ab+=a*b;
Mir scheint, dass Du das ganze Konzept mit Pointer, Speicheraddresse bzw. Inhalt nicht wirklich verstanden hast. Beim Kompilieren warnt Dich doch schon der Kompiler wegen "assignment from incompatible pointer type". Auf solche Warnung solltest Du entspr. achten und nicht einfach ignorieren.
cheers
[ 本帖最后由 desert_penguin 于 2007-12-10 12:34 编辑 ] LS的兄弟改的差不多了,还有就是int ab不能这么定义的,不能用变量来定义数组,这样编译器无法实际分配内存,要是能直接用变量定义数组,那一开始的矩阵A,B也不会写那么麻烦了 谢谢LS的,我定义的动态的2维数组,编译通过,但是就是执行时报内存错.
回复 #9 maedebach 的帖子
Sowie Du es programmiert hast, wird das mit dem ab sogar funktionieren, da der m und k zu Runtime beim Deklarieren von **ab schon initialisiert sind. Falsch ist das natuerlich trotzdem, abgesehen davon, dass sowas nicht mit jedem Kompiler funktioniert.Dein Code ist, so leid es mir auch tut, leider eine einzige Ansammlung von Verstaendnisfehlern $汗$ . Dein Speicherzugriffsfehler liegen warhscheinlich woanders. Guck Dir die Korrekturvorschlaege von uns mal genauer an und benutzt mal einen Debugger.
cheers
[ 本帖最后由 desert_penguin 于 2007-12-10 16:01 编辑 ]
页:
[1]
2