注册 登录
编程论坛 C++教室

问下关于指针的问题.代码简单

fly2xj 发布于 2010-05-28 00:01, 626 次点击

程序代码:
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 编辑 ]
5 回复
#2
南国利剑2010-05-28 00:04
你最后的那句改变了str的指向啊。
所以new的那块空间就失去了标识符了。
所以那块内存就泄露了。
这个问题值得注意。
#3
fly2xj2010-05-28 00:18
回复 2楼 南国利剑
那正确的方法应该是什么样的?
#4
最近不在2010-05-28 02:03
程序代码:
#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;
}
#5
bccn2502010-05-28 04:40
为什么不直接用strcpy ?
#6
南国利剑2010-05-28 13:27
回复 5楼 bccn250
用strcpy函数也可以。

1