博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于malloc内存申请的深入研究
阅读量:6005 次
发布时间:2019-06-20

本文共 1252 字,大约阅读时间需要 4 分钟。

在内存申请和使用上总是会出现一些莫名其妙的问题,今天刚好又碰到了,这里总结一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//1.编译可以通过,但是执行不过。卡死在注释那一句
void 
test()
{
    
char 
* str = (
char 
*)
malloc
(100);
    
strcpy
(str,
"hello"
);
    
free
(str);
    
if
(str != NULL)
    
{
        
strcpy
(str,
"world"
);
        
printf
(
"%s\n"
,str);
//因为str已经free,所以对str的访问出现问题,卡死在这一步
    
}
}
//---------------------------------------
//2.双指针是OK的
void 
getMemory(
char 
**p,
int 
num)
{
    
*p = (
char 
*)
malloc
(num);
}
 
void 
test()
{
    
char 
*str = NULL;
    
getMemory(&str,100);
    
strcpy
(str,
"hello"
);
    
printf
(
"%s\n"
,str);
}
 
//-----------------------------------------
//3.编译通过,执行通过,返回垃圾文字。
char 
* getmemory()
{
    
char 
p[] = 
"hello world"
;
    
return 
p;
}
 
void 
test()
{
    
char 
*str = NULL;
    
str = getmemory();
    
printf
(
"%s\n"
, str);
//因为getmemory()中返回的是局部变量的地址,
    
//所以在getmemory()执行完毕后,该变量自动释放。所以访问失败。输出一些垃圾文字。
}
//-----------------------------------------
//4.编译通过,执行失败。
void 
getmemory(
char 
*p)
{
    
p = (
char 
*)
malloc
(100);
//内存空间申请后,指向这一空间的指针被释放
}
 
void 
test()
{
    
char 
*str = NULL;
    
getmemory(str);
    
strcpy
(str, 
"hello world"
);
//str没有空间来容纳后面的字符串
    
printf
(
"%s\n"
, str);
}
本文转自313119992 51CTO博客,原文链接:http://blog.51cto.com/qiaopeng688/1852158

转载地址:http://krpmx.baihongyu.com/

你可能感兴趣的文章
cx_Oracle install
查看>>
jquery ajax从后台获取数据
查看>>
基于Windows平台TSM 6.x版本下,如何删除初始化失败的实例。
查看>>
Start Code School Today!
查看>>
Nginx下载服务生产服务器调优
查看>>
移动互联网,入口生死战
查看>>
nginx面试常问题目
查看>>
制作ubuntu系统u盘镜像,以及安装
查看>>
JAVA多线程深度解析
查看>>
Kafka High Level Consumer 会丢失消息
查看>>
时间轴
查看>>
入坑vim之配置文件vimrc
查看>>
java 获取系统当前时间的方法
查看>>
Ubuntu 10.04升级git 到1.7.2或更高的可行方法
查看>>
MyBATIS(即iBATIS)问题集
查看>>
Linux下autoconf和automake使用
查看>>
UDP之socket编程
查看>>
Spring Security4实战与原理分析视频课程( 扩展+自定义)
查看>>
Centos6.5升级系统自带gcc4.4.7到gcc4.8.0
查看>>
redis安装与配置文件详解
查看>>