| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1112 人关注过本帖
标题:动态申请空间出现的乱码问题
只看楼主 加入收藏
huafeizhijia
Rank: 2
等 级:论坛游民
帖 子:13
专家分:34
注 册:2012-9-17
收藏
得分:0 
学习了

huafeizhijia  。com话费之家
2012-09-17 14:14
zhangqi_gsts
Rank: 6Rank: 6
来 自:甘肃天水
等 级:侠之大者
威 望:1
帖 子:227
专家分:457
注 册:2011-3-27
收藏
得分:0 
回复 9楼 明明白白
释放内存指的是释放指针所指的那块内存,那块内存不能被这个指针引用了,而这个指针仍然是有效的,你可以重新给该指针分配空间
2012-09-17 17:44
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
  地址 数据  控制   哈哈    地址产生数据 控制产生方向
CPU   AX BX CX DX BP SI DI
         DS SS CS ES  IP  SP    好麻烦

接分

我要成为嘿嘿的黑客,替天行道
2012-09-17 17:50
zhangqi_gsts
Rank: 6Rank: 6
来 自:甘肃天水
等 级:侠之大者
威 望:1
帖 子:227
专家分:457
注 册:2011-3-27
收藏
得分:0 
回复 8楼 明明白白
释放了那20066块字节之后,ptr仍然是个指针,既然是指针,就可以让它指向一个字符串,所以ptr = "world"是对的。
另外,ptr="world"和strcpy(ptr,"world")肯定是有区别 的,当已经给ptr分配了内存时(假如是10个字节),这是,ptr就相当于是一个数组了(但是仅仅10字节大小),ptr="world"和strcpy(ptr,"world")效果就一样了(只是如果真的是数组的话不能直接赋值)。当没有给ptr分配内存时,你用strcpy(ptr,"world")就有问题了,因为你不知道ptr具体指向空间的大小,确切来说,它只指向某一个字节,而你用ptr = "world"时,相当于吧“world”(这是常量无名字符串,存储在静态池中)的首地址赋值给了ptr,首地址就是一个字节的地址,而ptr就是指向一个字节地址的。
2012-09-17 17:54
姻脂梦
Rank: 6Rank: 6
等 级:侠之大者
帖 子:264
专家分:424
注 册:2012-7-3
收藏
得分:0 
在块末尾释放
2012-09-17 18:50
明明白白
Rank: 2
等 级:论坛游民
帖 子:57
专家分:61
注 册:2012-3-19
收藏
得分:0 
回复 14楼 zhangqi_gsts
还有一点不明白
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void Test(void)
{
    //我用折半法试了下
    // 这块malloc里的数在10到1900之间的话下面的printf就会正常输出,10以下会出现内存错误,1900以上会出现乱码;
    //这个不知道怎么回事?求教!
   
    char *ptr = (char *)malloc(1900);    strcpy(ptr,"helloWorld");
    free(ptr);
    if(ptr!=NULL)
    {
        strcpy(ptr,"world");
        printf(ptr);
    }
}

int main()
{
    Test();
    return 0;
}
2012-09-17 20:09
zhangqi_gsts
Rank: 6Rank: 6
来 自:甘肃天水
等 级:侠之大者
威 望:1
帖 子:227
专家分:457
注 册:2011-3-27
收藏
得分:0 
回复 16楼 明明白白
能输出不一定就是正确的,比如当你数组下标确界时程序可能还会正常运行
2012-09-17 22:37
快速回复:动态申请空间出现的乱码问题
数据加载中...
 
   



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

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