| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 552 人关注过本帖
标题:关于动态分配内存,最后一个数输出时产生错误
只看楼主 加入收藏
Spygg
Rank: 5Rank: 5
等 级:职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:6 
关于动态分配内存,最后一个数输出时产生错误
#include<stdio.h>
#include<stdlib.h>
main(void)
{
    int *p,n;
    printf("Input n:\n");
    scanf("%d",&n);
    while(n--)
    {
        p=(int*)malloc(sizeof(int));
        if(p==NULL)
        {
            printf("Memory alloc fail\n");
            exit(0);
        }
        printf("Input the numbers\n");
        scanf("%d",p);
        printf("%d\n",*p);
        p++;
    }
    free(p);
}
搜索更多相关主题的帖子: 动态 内存 输出 
2010-03-25 21:50
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:10 
#include<stdio.h>
#include<stdlib.h>
main(void)
{
    int *p,n;
    printf("Input n:\n");
    scanf("%d",&n);
    while(n--)
    {
        p=(int*)malloc(sizeof(int));
        if(p==NULL)
        {
            printf("Memory alloc fail\n");
            exit(0);
        }
        printf("Input the numbers\n");
        scanf("%d",p);
        printf("%d\n",*p);
        free(p);
    }
}
2010-03-25 22:08
Spygg
Rank: 5Rank: 5
等 级:职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
main(void)
{
    int *p,n;
    printf("Input n:\n");
    scanf("%d",&n);
    p=(int*)malloc(n*sizeof(int));
        q=p;
    while(n)
    {
        p=(int*)malloc(sizeof(int));
        printf("%x",p);
        if(p==NULL)
        {
            printf("Memory alloc fail\n");
            exit(0);
        }
            
        printf("Input the numbers\n");
        scanf("%d",p);
        printf("%d\n",*p);
        n--;
        p++;
    }
    free(q);
}
2010-03-25 23:10
Spygg
Rank: 5Rank: 5
等 级:职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
收藏
得分:0 
回复 2楼 ldg628
嗯,谢谢了,我也找到原因了
2010-03-25 23:11
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
回复 3楼 Spygg
呵呵,你那个p++没什么用的,循环里malloc的内存一个也没被释放掉。。。malloc,free的用法没有搞清楚,再查查资料啊~学习愉快~~~
2010-03-25 23:24
Spygg
Rank: 5Rank: 5
等 级:职业侠客
帖 子:135
专家分:394
注 册:2007-5-20
收藏
得分:0 
回复 5楼 ldg628
嗯,谢谢了,我用p++的目的是想动态的存储一个数组,如果不用p++的话每次malloc分配的地址都是一样的,我看书上说free要释放malloc所分配的所有内存,如果开始的时候一次分配n个int长度的连续内存,在释放p是可以的,但是我想是数组的长度事先不知道,这个要怎么办啊?
2010-03-26 09:03
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
用或者不用p++,它指向的地方在你再次调p=(int*)malloc(sizeof(int))时,p的值已经改变了,p不会一样的(除了申请空间失败返回NULL)
想动态地分配一个n长度的连续内存,你可以用realloc,具体你可以在网上搜搜。。。
2010-03-26 09:10
快速回复:关于动态分配内存,最后一个数输出时产生错误
数据加载中...
 
   



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

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