| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1112 人关注过本帖
标题:动态申请空间出现的乱码问题
只看楼主 加入收藏
明明白白
Rank: 2
等 级:论坛游民
帖 子:57
专家分:61
注 册:2012-3-19
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:16 
动态申请空间出现的乱码问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void Test(void)
{
    char *ptr = (char *)malloc(20066);
    strcpy(ptr,"helloWorld");
    free(ptr);

    if(ptr!=NULL)
    {

        int i;
        strcpy(ptr,"world");
        printf(ptr);
    }
}

int main()
{
    Test();

    return 0;
}
为什么会出现乱码现象?
搜索更多相关主题的帖子: world return include void 空间 
2012-09-16 22:14
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
你把ptr 给干掉了 人间蒸发了 
还对它这么念念不忘 醒醒吧 人死不能复生 谁造的孽谁去承担
free(ptr);//鸡生蛋

    if(ptr!=NULL)//蛋生鸡
    {

        int i;
        strcpy(ptr,"world");
        printf(ptr);
    }

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2012-09-16 22:51
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:0 
free(ptr);  代码运行到这儿就堆已经销毁了,后面的属于非法访问了
 
2012-09-16 22:53
明明白白
Rank: 2
等 级:论坛游民
帖 子:57
专家分:61
注 册:2012-3-19
收藏
得分:0 
回复 3楼 遗矢的老人
free(ptr)是释放ptr所指向的空间,但是我重新让ptr指向了“world”,为什么不能输出啊?
2012-09-16 23:08
遗矢的老人
Rank: 9Rank: 9Rank: 9
来 自:成都
等 级:蜘蛛侠
威 望:7
帖 子:325
专家分:1131
注 册:2012-7-20
收藏
得分:0 
  free(ptr); 应该你不用那个空间了再释放,你一旦释放了就不应该再去访问了,因为你释放了后那款空间可能被其它程序使用了,反正被计算机重新分配了
 
2012-09-16 23:16
zhangqi_gsts
Rank: 6Rank: 6
来 自:甘肃天水
等 级:侠之大者
威 望:1
帖 子:227
专家分:457
注 册:2011-3-27
收藏
得分:20 
你可能对释放内存理解不透彻
所谓释放内存,指的就是把这个指针指向的内存释放了,释放后这个指针还是这向那儿的。假如p指向的是100开始的100个字节,在你没释放前,通过p就可以访问100——200这个范围内的字节。当你释放后p还是指向100的位置处,但是,当你通过p访问100以后的内存时,就会出错。因为当p是指向char是指针是p++是后移一个字节,而当p是指向int的指针时p++一次后移4个字节,现在你释放了,当通过p++访问时就会出错
void Test(void)
{
    char *ptr = (char *)malloc(20066);
    strcpy(ptr,"helloWorld");
    free(ptr);   
    if(ptr!=NULL)    //这儿除非你在释放后显示的让ptr = NULL,不然即使你释放了,ptr也不会是NULL的
    {
        int i;
        strcpy(ptr,"world");   // 通过ptr只能访问ptr指向的当前一个字节的内存,所以要复制5个字节的话就会cuwu
        printf(ptr);
    }
}
2012-09-16 23:50
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
在反复振荡中成长

www.qunxingw.wang
2012-09-16 23:57
明明白白
Rank: 2
等 级:论坛游民
帖 子:57
专家分:61
注 册:2012-3-19
收藏
得分:0 
回复 6楼 zhangqi_gsts
void Test(void)
{
    char *ptr = (char *)malloc(20066);
    strcpy(ptr,"helloWorld");
    free(ptr);   
    if(ptr!=NULL)     
   {
        int i;
        ptr = "world";
        printf(ptr);
    }
}
这样的话就可以正常输出,为什么?求教ptr="world"和strcpy(ptr,"world")一样吗?
2012-09-17 12:18
明明白白
Rank: 2
等 级:论坛游民
帖 子:57
专家分:61
注 册:2012-3-19
收藏
得分:0 
回复 6楼 zhangqi_gsts
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void Test(void)
{
    char *ptr = (char *)malloc(20066);
    strcpy(ptr,"helloWorld");
    printf("ptr = %p\n",ptr);//加上一个printf语句就可以正常输出了,不知道问题到底出到哪里了??
    free(ptr);
    if(ptr!=NULL)
    {
        strcpy(ptr,"world");
        printf(ptr);
    }
}



int main()
{
    Test();

    return 0;
}
2012-09-17 12:35
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3451
专家分:19340
注 册:2012-3-31
收藏
得分:0 
xuexi

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-09-17 12:39
快速回复:动态申请空间出现的乱码问题
数据加载中...
 
   



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

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