| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 518 人关注过本帖
标题:free函数的问题
只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
结帖率:97.5%
收藏
已结贴  问题点数:10 回复次数:6 
free函数的问题
问一个sb问题,形参和实参都是指针。只释放实参的指针行了吗?
2017-03-24 13:53
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10565
专家分:43004
注 册:2014-5-20
收藏
得分:10 
free函数是用来释放用户自己分配的空间用的,如用malloc、calloc、realloc等,使用用完毕就要用free。
2017-03-24 14:16
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 2楼 吹水佬
主函数和函数都使用了 都要释放?
2017-03-24 14:26
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10565
专家分:43004
注 册:2014-5-20
收藏
得分:0 
以下是引用Emotiona在2017-3-24 14:26:32的发言:

主函数和函数都使用了 都要释放?

看怎么用,最好给代码看看。
2017-03-24 14:33
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 4楼 吹水佬
这种的话就只释放主函数,形参就不用释放把,没有在函数里面开辟空间。这个程序还运行不了,麻烦帮我看看问题处在哪里
#include<stdio.h>
#include<stdlib.h>
void mag(int **p, int n)
{
    int i, j, k;
    for(i=1; i<=n; i++)
    for(j=1; j<=n; j++)
    p[i][j]=0;
    j=n/2+1;
    p[1][j]=1;
    for(k=2;k<=n*n;k++)
    {
        i=i-1;
        j=j+1;
        if((i<1)&&(j>n))
        {
            i=i+2;
            j=j-1;
        }
        else
        {
            if(i<1) i=n;
            if(j>n) j=1;
        }
        if(p[i][j]==0)
        p[i][j]=k;
        else
        {
            i=i+2;
            j=j-1;
            p[i][j]=k;
        }
    }
    for(i=1; i<=n; i++)
    for(j=1; j<=n; j++)
    {
        printf("%d ", p[i][j]);
        if(j==n)
        printf("\n");
    }
}
int main()
{
    int **p, i, n;
    while(1)
    {
        printf("输入N,打印出N*N的魔方阵\n");
        scanf("%d",&n);
        p=(int **)malloc(n* sizeof(int *));
        for(i=0; i<n; i++)
        *(p+i)=(int *)malloc(n* sizeof(int));
        mag(p,n);

        free(p);
        for(i=0;i<n;i++)
        free(p[i]);
    }
    return 0;

}
2017-03-24 15:00
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10565
专家分:43004
注 册:2014-5-20
收藏
得分:0 
回复 5楼 Emotiona
大概也是这样,用完就free。
但按过程顺序看,应该是先free p[i]最后才free p
for(i=0;i<n;i++)
    free(p[i]);
free(p);
2017-03-24 15:19
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
回复 6楼 吹水佬
明白了.3Q
2017-03-24 15:22
快速回复:free函数的问题
数据加载中...
 
   



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

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