【动态二维数组赋值问题】

bluestar2009 2012-04-16 10:05:42
#include "stdio.h"
#include <stdlib.h>
#include <time.h>
#define LEN 100
main()
{
FILE *fp;
int i=0,j=0,k=0,num;
char line[15]={0};
srand((unsigned)time(NULL));
//申请二维动态数组
int **arry=(int **)malloc(sizeof(int*)*LEN);
for (i=0;i<LEN;i++)
{
arry[i] = (int*)malloc(sizeof(int)*LEN);
//初始化
memset(arry[i],0,sizeof(arry[i]));
}
//赋值

for (i=0;i<100;i++)
{
for (j=0;j<10;j++)
{
*(arry[i]+j)=rand()%98+1;
}
}

//输出
for (i=0;i<LEN;i++)
{
for (j=0;i<10;j++)
{
printf("%d ",*(arry[i]+j));
}
printf("\n");
}
}
...全文
123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
muyi66 2012-04-16
  • 打赏
  • 举报
回复
一共找到4处问题:
#include "stdio.h"
#include <stdlib.h>
#include <time.h>
#include <string.h> /*使用memset需要这个头文件*/
#define LEN 100
main()
{
FILE *fp;
int i=0,j=0,k=0,num;
char line[15]={0};
//申请二维动态数组
int **arry=(int **)malloc(sizeof(int*)*LEN);
srand((unsigned)time(NULL)); /*这一句要放到数据定义语句之后*/
for (i=0;i<LEN;i++)
{
arry[i] = (int*)malloc(sizeof(int)*LEN);
//初始化
memset(arry[i],0,sizeof(int)*LEN); /*这里只能这样写,原来的写法获得的只是一个数组元素的尺寸,而那个元素是个指针,只有4字节大小*/
}
//赋值

for (i=0;i<100;i++)
{
for (j=0;j<10;j++)
{
*(arry[i]+j)=rand()%98+1;
}
}

//输出
for (i=0;i<LEN;i++)
{
for (j=0;j<10;j++) /*你把这里的循环终止条件写错了*/
{
printf("%d ",(arry[i])[j]); /*这是链式数组的另一种寻址方式,看起来更像访问数组的样子。*/
}
printf("\n");
}
}
bluestar2009 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
*(arry[i]+j)=rand()%98+1;

这种语句建议换种方式:
arry[i][j]...
[/Quote]

我申请的是动态二维数组 所以是指针

或者

你改的要能正确运行也行

我只会这么用动态二维数组
evencoming 2012-04-16
  • 打赏
  • 举报
回复
memset(arry[i],0,sizeof(arry[i]));
==>
memset(arry[i],0,sizeof(arr[i][0])*LEN);
evencoming 2012-04-16
  • 打赏
  • 举报
回复
*(arry[i]+j)=rand()%98+1;

这种语句建议换种方式:
arry[i][j]...
bluestar2009 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
一共找到4处问题:

C/C++ code

#include "stdio.h"
#include <stdlib.h>
#include <time.h>
#include <string.h> /*使用memset需要这个头文件*/
#define LEN 100
main()
{
FILE *fp;
int i=0,j=0,k=0,num;
……
[/Quote]

我发现我的错误了 最根本的就是在最后输出的地方的二层循环里的 j<10 手误成 i<10 了

至于memset 那是我把程序里原来的一些内容删掉时多删了······

哎 不小心害死人
muyi66 2012-04-16
  • 打赏
  • 举报
回复
那个赋值没什么问题,只是表达方式的区别而已。

输出那个printf没问题,但内层循环的终止条件不对。会导致内存循环根本无法终止,直至对数组的访问严重越界后被操作系统发现。
bluestar2009 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 muyi66 的回复:]
一共找到4处问题:

C/C++ code

#include "stdio.h"
#include <stdlib.h>
#include <time.h>
#include <string.h> /*使用memset需要这个头文件*/
#define LEN 100
main()
{
FILE *fp;
int i=0,j=0,k=0,num;
……
[/Quote]

for (i=0;i<100;i++)
{
for (j=0;j<10;j++)
{
*(arry[i]+j)=rand()%98+1;
}
}



是不是这样赋值不对呢?


for (i=0;i<LEN;i++)
{
for (j=0;i<10;j++)
{
printf("%d ",*(arry[i]+j));
}
printf("\n");
}
}

这样的输出也不对么?

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧