首页
社区
课程
招聘
[求助]求助如下c程序的2维数组输出问题
发表于: 2006-7-6 22:53 6793

[求助]求助如下c程序的2维数组输出问题

2006-7-6 22:53
6793

程序功能很简单,就是定义一个2维数组,同时置0输出
但是每次都第2行就出错退出
大虾帮忙啊

#include <stdio.h>

// 输出 maze(i,j)
void output(int *maze[],int len)
{
        int i,j;
       
        for(i=0;i<len;i++)
        {
                for(j=0;j<len;j++)
                        {
                                maze[i][j]=0;
                                printf("%d ",maze[i][j]);               
                        }
                printf("\n");               
        }
}

void main(int argc, char *argv[])
{
        //定义相关数据
        int Len=0;
        int **Maze;

        // 输入边长        len<=1000
        printf("PLS input len:");
        scanf("%d",&Len);
       
        // 申请空间 MAZE
        Maze = (int**)malloc(Len*Len*sizeof(int));
        if(NULL != Maze)
                printf("Space allocate success!\n");
        else
                {
                        printf("Space allocate Faliure!\n");
                        exit(0);
                }
        printf("allocate %d bytes\n",Len*Len*sizeof(int));

        // 输出 Maze(i,j)
        output(Maze,Len);
}


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
2
内存申请的不对
2006-7-6 23:04
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
3
我的两个XP sp2出错的图片如下
我顺便问一下,问什么同样是xp sp2,出错的图片显示不一样,
一个有调试,一个没有,这是什么原因阿,有什么区别吗?

2006-7-6 23:05
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
4
最初由 WAKU 发布
内存申请的不对

我申请的是边长*边长*4阿,然后转换为int**,我还是不知道错在什么地方
求教ing...
2006-7-6 23:07
0
雪    币: 250
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 Aker 发布
我的两个XP sp2出错的图片如下
我顺便问一下,问什么同样是xp sp2,出错的图片显示不一样,
一个有调试,一个没有,这是什么原因阿,有什么区别吗?



一个系统打开了错误报告功能,另一个系统关闭了错误报告功能
2006-7-6 23:31
0
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
6
这么申请还是一维数组
还是用i*len+j形式引用比较好
2006-7-6 23:32
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
7
最初由 enbrow 发布
一个系统打开了错误报告功能,另一个系统关闭了错误报告功能


谢谢####@@@#####
呵呵呵
2006-7-6 23:36
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
8
最初由 WAKU 发布
这么申请还是一维数组
还是用i*len+j形式引用比较好


那请问一下c中要是想分配
可变二维数组该怎么做呢,谢谢・・・

我在网上找了一段动态分配二维数组代码,
原来的地址是
http://club.yesky.com/archiver/?tid-292566.html
里面注释是我加的,稍微整理个以下,但是看不懂,那位大虾指教阿

========2004-4-9 18:09:14网络文盲
http://club.yesky.com/archiver/?tid-292566.html

char **s;
int i,j,row,col;
printf("please input rows:");
scanf("%d",&row);
printf("\nplease input col:");
scanf("%d",&col);

// 分配 (行个数*字符指针长度) 个字节
if((s=malloc(sizeof(char*)*row))==0)
{
        printf("allocatesmainmemoryerr!");
        return1;
}

// s[i]为字符指针,看不懂,
for(i=0;i<row;i++)
        if((s[i]>=malloc(sizeof(char)*col))==0)
        {
                printf("allocatesmainmemoryerr!");
                return1;
        }
2006-7-6 23:50
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
9
(int**)malloc(Len*Len*sizeof(int));
分配连续的存储空间,长度为Len*Len*sizeof(int)
(int**)从意思上来说是为了转化为二维数组索引形式

由于VC中二维数组是以“行”优先,所以在对
二维数组进行索引的时候,例如A[i][j] ;
实际上就是引用第 ( i * RowNum + j )个空间

但是(int**)并没有指定二维数组中每个的数目
所以当执行你所指的第二行的时候,会因为无法确定RowNum而无法定位存储单元,导致出错
2006-7-7 00:10
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
10
最初由 北极星2003 发布
(int**)malloc(Len*Len*sizeof(int));
分配连续的存储空间,长度为Len*Len*sizeof(int)
(int**)从意思上来说是为了转化为二维数组索引形式

由于VC中二维数组是以“行”优先,所以在对
........

收到,呵呵,
是不是说c里面就不可以定义变长的2维数组呢
2006-7-7 00:39
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
11
最初由 Aker 发布
收到,呵呵,
是不是说c里面就不可以定义变长的2维数组呢


当然可以。先分配一组单位个数为i的内存,再分配i组大小为j的内存,该i组内存地址存储于第一组内存中,如图:

2006-7-7 10:00
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
12
最初由 prince 发布
当然可以。先分配一组单位个数为i的内存,再分配i组大小为j的内存,该i组内存地址存储于第一组内存中,如图:



谢谢大家热心帮忙,我的实现代码如下
参考了网络文盲的代码,http://club.yesky.com/archiver/?tid-292566.html
谢谢,prince的提示

Type 自己定义
如:
#define        Type int
#define        DEBUG 1
#ifdef        DEBUG
#define        DebugPrint(arg) printf(arg)
#else
#define        DebugPrint(arg)
#endif

/*
        功能:        动态分配Maze[row][col]
        返回值:        二维数组地址,分配失败为空
       
*/
Type ** AllocateMatt(int row, int col)
{
        int i,j;
        Type **Maze;
        // 分配一组单位个数为row的内存
        if((Maze=(Type **)malloc(sizeof(Type*)*row))==0)
        {
                DebugPrint("allocate row index err!");
                return NULL;
        }
        DebugPrint("allocate %d bytes for row\n",sizeof(Type*)*row);

        // 分配row组大小为col的内存
        for(i=0;i<row;i++)
                if((Maze[i]=(Type*)malloc(sizeof(Type)*col))==0)
                {
                        DebugPrint("allocate row block err!");
                        return NULL;
                }
        DebugPrint("allocate %d bytes per row\n",sizeof(Type)*col);
        return Maze;
}

另外,DebugPrint 好像带参数就会提示宏的实参太多,同时输出不对,呵呵

顺便问一下,c语言也是这样实现的吗?
2006-7-7 11:58
0
游客
登录 | 注册 方可回帖
返回
//