C++的动态内存分配

char * mName;
void setName(const char * name)
{
    free(mName);                            // free用于释放malloc申请的内存空间,同时记住释放后应该把指针置NULL防止出现“野指针”。
    mName = (char*) malloc(sizeof(name) + 1);
    if (NULL != mName)
    {
        strcpy(mName, name);
    }
}
#include 

char * mName;
void setName(const char * name)
{
    delete[] mName;                         // delete用于释放new申请的内存空间,同时记住释放后应该把指针置NULL防止出现“野指针”。
    mName = new char[strlen(name) + 1 + 8]; // abcdefg为8个字符长度
    if (NULL != mName)
    {
        strcpy(mName, name);
        strcat(mName, "abcdefg");           // 往后面添加
    }

    // 最后释放内存应该使用 delete[] mName;因为时候使用了 new type[size];
}
</pre>
</section>

char strs[] = "abcdefg";

sizeof(strs);               // 输出8,sizeof能够计算出数组占用的内存容量,最后还有"\0"。
                            // 但有一点,数组作参数传递时会自动退化成指针,所以容量应该是sizeof(char) = 4。

strlen(strs);               // 输出7,strlen能够计算出字符,仅限于字符的长度,并不包括"\0"。
                            // 作strlen的参数时会自动退化为char*指针。