动态内存申请与释放

  • 格式:docx
  • 大小:13.02 KB
  • 文档页数:4

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

动态内存申请与释放

(1)malloc方式

申请一维内存时,格式为:

类型表示符*变量名;

变量名= (类型标识符*)malloc(sizeof(类型标识符)*数组大小);

在使用完该方式申请的内存后,必须用free()函数及时释放,格式为:free(变量名)

变量名= NULL;

当申请二维内存时,格式为:

类型标识符**变量名;

变量名= (类型标识符**)malloc(sizeof(类型标识符*)*数组行大小);

for(int i=0;i<数组行大小;i++)

变量名[i] = (类型标识符*)malloc(sizeof(类型标识符)*数组列大小);释放格式:

free(变量名);

变量名= NULL;

(2)new方式

当申请一维内存时,格式为:

类型标识符*变量名;

变量名= new 类型标识符[数组大小];

使用该方式申请的内存后,必须用delete()函数及时释放格式:

delete[] 变量名;

变量名= NULL;

当申请二维内存时,格式为:

类型标识符**变量名;

变量名= new 类型标识符*[数组行大小];

for(int i=0;i<数组行大小;i++)

变量名[i] = new 类型标识符[数组列大小];

释放格式:

delete[] 变量名;

变量名= NULL;

例子:

申请二维内存

代码:

1 #include

2 #include

3 using namespace std;

4

5 int main()

6 {

7 int row;

8 int col = 2;

9 cout<<"please input row:"<

10 cin>>row;

11 int **memo;

12 memo = (int **)malloc(sizeof(int*)*row);

13 for(int k=0;k

14 memo[k] = (int *)malloc(sizeof(int)*col);

15 for(int i=0;i

16 {

17 for(int j=0;j

18 cin>>memo[i][j];

19 }

20 cout<<"标号——————————————值"<

21 for(int i=0;i

22 {

23 for(int j=0;j

24 cout<

25 cout<

26 }

27 free(memo);

28 memo = NULL;

29 return 0;

30

31 }

注明:错误的释放指针会导致程序崩溃

但是什么时候会出现这种情况?怎么解决?

当指向内存块的指块已超出其边界,一定要将指针指回首地址。