c++ string

c++ string求助
我想自己保存一个与源字符串无关的字符串,应该怎么实现?
C/C++ code

#include <string>
#include <iostream>

void main()
{
    char* charTmp = new char[100];
    charTmp = "hello world";
    printf("%d\n",charTmp);
    printf("%s\n",charTmp);
    char* str1 = new char[100];
    strcpy(str1,charTmp);
    delete []charTmp;
    printf("%d\n",str1);
    printf("%s\n",str1);
    delete []str1;
    system("pause");
}

我感觉上面写的应该没问题,可是运行会出错。
求高手解答。

------解决方案--------------------
关键在于charTmp = "hello world"这样的赋值不妥当,会导致delete失败,应该改为strcpy(charTmp, "hello world"),这样就不会出现charTmp被常量的歧义了。
------解决方案--------------------
C/C++ code

#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
    char* charTmp = new char[100];
    //charTmp = "hello world";
    strcpy(charTmp, "hello world");
    printf("%d\n",charTmp);
    printf("%s\n",charTmp);
    char* str1 = new char[100];
    strcpy(str1,charTmp);
    delete charTmp;
    printf("%d\n",str1);
    printf("%s\n",str1);
    delete str1;
    system("pause");
    return 0;
}

------解决方案--------------------
探讨

引用:
所以正确的习惯是delete之后再把指针charTmp=NULL;这样杜绝这种容易导致访问错误的方式。

我的目的是想自己保存一份字符串的备份,就算new出来的被delete之后,也不影响我这正常访问。

------解决方案--------------------
探讨

引用:
我运行的没问题啊。。。你错误在什么地方啊。。。你 printf("%d\n",charTmp)这是什么意思啊。。。好像毫无用处

是打印字符首地址。。我想打印的是,至于具体打印出来的是啥,我也不太清楚。。。

------解决方案--------------------
charTmp = "hello world";这句有问题啊,字符串不能这么赋值,要用memcpy或是strncpy之类的,你这样相当与直接修改指针变量的值,让它指向一个字符串常量了,所以在delete的时候就挂了,而且new的100个字符也没法释放了
------解决方案--------------------
你程序中最直接的错误就是delete charTmp;
因为你在给 charTmp赋值时是直接用“=”运算符,只是将 charTmp这个指针的指向改变了,使它指向了一个常量字符串的首地址,而常量字符串在只读区,所以你在delete 这个指针指向的区域时会出错。可以用strcopy或memcopy来赋值。