| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 626 人关注过本帖
标题:问下关于指针的问题.代码简单
只看楼主 加入收藏
fly2xj
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-27
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:5 
问下关于指针的问题.代码简单

程序代码:
 char *p= "1236";

 char *str = new char[5];

 if(NULL == str)

 {
    cout<<"error!"<<endl;

 } 


 str = "231";     //在vc里看的时候,发现str改变了指向, str不是应该指向自由存储区里的new分配出来的内存空间么?
这个时候str指向了了临时空间里的&"231". 那new分配出来的内存空间意义何在?


[ 本帖最后由 fly2xj 于 2010-5-28 00:11 编辑 ]
搜索更多相关主题的帖子: 指针 代码 
2010-05-28 00:01
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
你最后的那句改变了str的指向啊。
所以new的那块空间就失去了标识符了。
所以那块内存就泄露了。
这个问题值得注意。

南国利剑
2010-05-28 00:04
fly2xj
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-5-27
收藏
得分:0 
回复 2楼 南国利剑
那正确的方法应该是什么样的?
2010-05-28 00:18
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:10 
程序代码:
#include "stdafx.h"
#include <iostream.h>

int main(int argc, char* argv[])
{
    char *str = new char[5];

    if(NULL == str)
    {
        cout<<"error!"<<endl;
    }
   
    //str = "231";   //这样做,相当于将字符串常量“231”的地址赋给了str。

     *str = '2';   //正确的做法,是将字符值赋给字符串每个字符地址所指向的值,而不是改变指针所指的地址。
     *(str+1) = '3';
     *(str+2) = '1';
     *(str+3) = '\0';

//     str = "\0";   //地址值为00428f00 //另外需要注意的是"\0"代表的并不是空指针。他代表的是空字符串
//     str = 0;    //地址值为00000000  //c++中更喜欢用更简单的0表示空指针。在许多头文件中,NULL是一个被定义为0的符号常量,用NULL是直观说明它是一个指针值
//     str = NULL;  //地址值为00000000
//     cout<<str<<endl;

    delete [] str;   //结尾不要释放内存
    str = NULL;   //良好的习惯将str置空,避免以后用到时为野指针
    return 0;
}
2010-05-28 02:03
bccn250
Rank: 5Rank: 5
等 级:职业侠客
帖 子:154
专家分:379
注 册:2010-5-25
收藏
得分:0 
为什么不直接用strcpy ?
2010-05-28 04:40
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
回复 5楼 bccn250
用strcpy函数也可以。


南国利剑
2010-05-28 13:27
快速回复:问下关于指针的问题.代码简单
数据加载中...
 
   



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

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