当前位置: 代码迷 >> C语言 >> 诚心请教,怎样生成动态二维数组???
  详细解决方案

诚心请教,怎样生成动态二维数组???

热度:334   发布时间:2006-10-09 18:52:04.0


怎么回事>?
#include "stdio.h"
#include "conio.h"
#define W 5
#define H 10
main()
{
int **num=NULL;
int i,j;

num=(int *)malloc(H*W*sizeof(int));

for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
num[i][j]=i+j;
}
for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
printf("%2d ",num[i][j]);
}
getch();

}
这个程序在TC下没问题
在WIN-TC下就不行


----------------解决方案--------------------------------------------------------

/* HELLO.C -- Hello, world */

#include "stdio.h"
#include "conio.h"
#define W 5
#define H 10
main()
{
int **num=NULL;
int i,j;

num=(int *)malloc(W*sizeof(int));
*num=(int *)malloc(H*sizeof(int));


for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
num[i][j]=0;
}
for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
printf("%2d ",num[i][j]);
}
getch();

}
这个在哪个里面都出问题
而且问题相同!
输出没问题
但是最后说 : NULL pointer assignment

先去上课 晚上回来再想这个问题


----------------解决方案--------------------------------------------------------
这动态分配用得少,先谢谢大家。
----------------解决方案--------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char* argv[])
{
int i, j;
int** p = (int**) malloc(10 * sizeof( int* ));
for(i = 0; i < 10; ++i)
{
p[ i ] = (int*) malloc(10 * sizeof( int ));
}

for(i = 0; i < 10; ++i)
{
for(j = 0; j < 10; ++j)
{
p[ i ][ j ] = j;
}
}

for(i = 0; i < 10; ++i)
{
for(j = 0; j < 10; ++j)
{
printf("%d ", p[ i ][ j ]);
}
putchar( '\n' );
}

for(i = 0; i < 10; ++i)
{
free( p[ i ] );
}
free( p );

printf("%d\n%s\n", argc, argv[ 0 ]);
printf("Press ENTER to exit...");
getchar();
return 0;
}

好像是这样的。编译、运行通过。


----------------解决方案--------------------------------------------------------
以下是引用cdmalcl在2006-10-9 18:52:04的发言:


怎么回事>?
#include "stdio.h"
#include "conio.h"
#define W 5
#define H 10
main()
{
int **num=NULL;
int i,j;

num=(int **)malloc(H*W*sizeof(int));

for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
num[i][j]=i+j;
}
for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
printf("%2d ",num[i][j]);
}
getch();

}
这个程序在TC下没问题
在WIN-TC下就不行


----------------解决方案--------------------------------------------------------
只有14楼的是对的
----------------解决方案--------------------------------------------------------
以下是引用SunShining在2006-10-9 19:20:04的发言:

num=(int **)malloc(H*W*sizeof(int));
有 运行结果也是一样

(老师讲的真恶不上了)


----------------解决方案--------------------------------------------------------

/* HELLO.C -- Hello, world */

#include "stdio.h"
#include "conio.h"
#define W 5
#define H 10
main()
{
int **num=NULL;
int i,j;

num=(int **)malloc(H*sizeof(int));

for(i = 0; i < H; ++i)
{
*(num+i)=(int *)malloc(W*sizeof(int));
}

for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
num[i][j]=i+j;
}
for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
printf("%2d ",num[i][j]);
}

getch();

}

学习了!!


----------------解决方案--------------------------------------------------------
以下是引用Knocker在2006-10-9 19:51:05的发言:
只有14楼的是对的

#include "stdio.h"
#include "conio.h"
#define W 5
#define H 10
main()
{
int *num=NULL;
int i,j;

num=(int *)malloc(H*W*sizeof(int));

for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
*(num+i*H+j)=i;
}
for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
printf("%2d ",*(num+i*H+j));
}
}

老K.这样不行吗?
我也感觉纳闷.在TC下这样没问题.可是在C-FREE下...他就没反映了,(编译通过.但什么也不做)
想了半天也没想通.难道是malloc没有分配成功?


----------------解决方案--------------------------------------------------------

我用的是C++;
int *piArray;
cout<<"请输入数组的大小:";
cin>>num;
piArray = new int[num];


----------------解决方案--------------------------------------------------------
  相关解决方案