update
[linguofeng.github.com.git] / _posts / 2012-11-06-cpp-dynamic-memory-allocation.textile
blob5e8d6ff1fc2248f38f27c16fb8fd1655c2657ba2
1 ---
2 layout: post
3 title: C++的动态内存分配
4 description: new与malloc动态内存分配的使用方法
5 categories: [archive]
6 tags: [c++]
7 ---
9 <section>
10     <div class="page-header">
11         <h3>一、malloc/free</h3>
12     </div>
13 <pre class="prettyprint">
14 char * mName;
15 void setName(const char * name)
17     free(mName);                            // free用于释放malloc申请的内存空间,同时记住释放后应该把指针置NULL防止出现“野指针”。
18     mName = (char*) malloc(sizeof(name) + 1);
19     if (NULL != mName)
20     {
21         strcpy(mName, name);
22     }
24 </pre>
25 </section>
27 <section>
28     <div class="page-header">
29         <h3>二、new/delete</h3>
30     </div>
31 <pre class="prettyprint">
32 #include <string.h>
34 char * mName;
35 void setName(const char * name)
37     delete[] mName;                         // delete用于释放new申请的内存空间,同时记住释放后应该把指针置NULL防止出现“野指针”。
38     mName = new char[strlen(name) + 1 + 8]; // abcdefg为8个字符长度
39     if (NULL != mName)
40     {
41         strcpy(mName, name);
42         strcat(mName, "abcdefg");           // 往后面添加
43     }
45     // 最后释放内存应该使用 delete[] mName;因为时候使用了 new type[size];
47 </pre>
48 </section>
50 <section>
51     <div class="page-header">
52         <h3>三、sizeof/strlen</h3>
53     </div>
54 <pre class="prettyprint">
55 char strs[] = "abcdefg";
57 sizeof(strs);               // 输出8,sizeof能够计算出数组占用的内存容量,最后还有"\0"。
58                             // 但有一点,数组作参数传递时会自动退化成指针,所以容量应该是sizeof(char) = 4。
60 strlen(strs);               // 输出7,strlen能够计算出字符,仅限于字符的长度,并不包括"\0"。
61                             // 作strlen的参数时会自动退化为char*指针。
62 </pre>
63 </section>