| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 369 人关注过本帖
标题:请高手帮忙,有关malloc函数
只看楼主 加入收藏
sanjianfei
Rank: 2
等 级:论坛游民
帖 子:48
专家分:53
注 册:2012-2-21
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:3 
请高手帮忙,有关malloc函数
(这段代码看不懂也没关系,与代码本身关系不大)这段代码有两个自定义函数组成,sx(),sy(),还有一个主函数,自定义函数没问题,问题出现在函数调用,涉及二维数组动态分配内存malloc()函数,这是前几天一个帖子上的题,运行结果是(发不了图片)
1 1 1 1 1 1
1 2 2 2 2 1
1 2 3 3 2 1
1 2 3 3 2 1
1 2 2 2 2 1
1 1 1 1 1 1
自定义函数测试没问题,自定义函数用的是*p,但是主函数由于涉及二维数组动态分配内存,用的是int **p 二级指针,所以我的函数调用部分
    sx(m,s);
    sy(m,s);
就出问题了,这道题好不容易做出来了,在最后的时候出问题,很急啊,请各位高手帮忙,把我的函数调用修改一下。
程序代码:
#include<stdio.h>
#include<malloc.h>
void sx(int m,int *p)
{
    int i,*q;
    for(i=0;i<m/2;i++)
    {
        int k=0;
        while(k<(m-2*i))
    {
        *(p+m*i+i+k)=i+1;
        k++;
    };
        k=0;
    while(i>0&&k<i)
    {
        *(p+m*i+k)=k+1;
        *(p+m*(i+1)-1-k)=k+1;
        k++;
    }
    }
    q=p+m*m-1;
    while(p<q)
        *q--=*p++;
}
void sy(int m,int *p)
{
    int i,*q;
    for(i=0;i<(m+1)/2;i++)
    {
        int k=0;
        while(k<(m-2*i))
    {
        *(p+m*i+i+k)=i+1;
        k++;
    };
        k=0;
        while(i>0&&k<i)
    {
        *(p+m*i+k)=k+1;
        *(p+m*(i+1)-1-k)=k+1;
        k++;
    }
    }
    q=p+m*m-1;
    while(p+m<q)
        *q--=*p++;
}
void main()
{
    int i,j,m;
    int **s;
    printf("输入矩阵边长\n");
    scanf("%d",&m);
    s=(int**)malloc(sizeof(int*)*m);
    for(i=0;i<m;i++)
    s[i]=(int*)malloc(sizeof(*s));
    if(m%2==0)
        sx(m,s);
    else
         sy(m,s);
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
            printf("%d",s[i][j]);
        printf("\n");
    }
}


[ 本帖最后由 sanjianfei 于 2012-3-8 15:04 编辑 ]
搜索更多相关主题的帖子: 函数 动态 
2012-03-08 14:59
sanjianfei
Rank: 2
等 级:论坛游民
帖 子:48
专家分:53
注 册:2012-2-21
收藏
得分:0 
没人啊
2012-03-08 16:51
zjkedy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:131
注 册:2010-5-14
收藏
得分:20 
s[i]=(int*)malloc(sizeof(*s));
这个 是不是不对啊  *s指向的应该是S[0]了吧,但你也还没分配啊
打印下 sizeof(*s) 的长度试试。
我对指针也不是很清楚  不知道是不是这样!
2012-03-08 22:16
zjkedy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:131
注 册:2010-5-14
收藏
得分:0 
上面的没仔细看代码,现在才发现
    sx(m,s);//其形参为 int、int**p

    void sx(int m,int *p)
形参不对啊 兄弟

2012-03-08 22:29
快速回复:请高手帮忙,有关malloc函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016790 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved