当前位置:网站首页>[Study Notes Dish Dog Learning C] Classic Written Exam Questions of Dynamic Memory Management
[Study Notes Dish Dog Learning C] Classic Written Exam Questions of Dynamic Memory Management
2022-08-05 05:16:00 【Jiang Junzhu】
题目一:
- 问题
Please ask the following code,运行Test 函数会有什么样的结果?
void GetMemory(char* p) {
p = (char*)malloc(100);
}
void Test(void) {
char* str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
int main() {
Test();
return 0;
}
- 代码分析
str传给GetMemoryThe function is passed the value,所以GetMemory函数的形参pWhat is received is a null pointer.GetMemoryThe function performs dynamic space application internally,地址存放在p中,并不会影响Test函数中的str.所以str的值依旧是NULL,所以strcpy失败.并且当GetMemory函数运行完之后,形参p销毁,dynamically developed100bytes of memory are not freed,这样就会导致内存泄露. - 图解

- 错误更正
char* GetMemory(char* p) {
p = (char*)malloc(100);
return p;
}
void Test(void) {
char* str = NULL;
str = GetMemory(str);
strcpy(str, "hello world");
printf(str);
free(str);
str = NULL;
}
int main() {
Test();
return 0;
}
题目二
- 问题
Please ask the following code,运行Test 函数会有什么样的结果?
char* GetMemory(void) {
char p[] = "hello world";
return p;
}
void Test(void) {
char* str = NULL;
str = GetMemory();
printf(str);
}
int main() {
Test();
return 0;
}
- 代码分析
GetMemory函数内部创建的数组是在栈区上创建的,当函数结束时,This space is also destroyed,因此pArrays have no space,返回pThe address of the array has no real meaning.如果strUse the returned address to access memory,就是非法访问. - 图解

- 错误更正
char* GetMemory(void) {
char* p = (char*)malloc(15);
p = "hello world";
return p;
}
void Test(void) {
char* str = NULL;
str = GetMemory();
printf(str);
}
int main() {
Test();
return 0;
}
题目三
- 问题
Please ask the following code,运行Test 函数会有什么样的结果?
void GetMemory(char** p, int num) {
*p = (char*)malloc(num);
}
void Test(void) {
char* str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
int main() {
Test();
return 0;
}
代码分析
GetMemory函数获取str的地址,Then dynamically open up a space,Hand over the address of this spacestr,最后拷贝“hello”并打印,没有一点问题,But he did not perform memory release,会导致内存泄漏.图解

错误更正
void GetMemory(char** p, int num) {
*p = (char*)malloc(num);
}
void Test(void) {
char* str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
free(str);
str = NULL;
}
int main() {
Test();
return 0;
}
题目四
- 问题
Please ask the following code,运行Test 函数会有什么样的结果?
void Test(void) {
char* str = (char*)malloc(100);
strcpy(str, "hello");
free(str);
if (str != NULL)
{
strcpy(str, "world");
printf(str);
}
}
int main() {
Test();
return 0;
}
代码分析
The problem with this code is that it doesn't empty,will result in a wild pointer,野指针是非常危险的.当free时,Dynamically opened space has been freed up,只不过strRemember the address of this space,Assigning a value to this space is illegal access.图解

错误更正
void Test(void) {
char* str = (char*)malloc(100);
strcpy(str, "hello");
free(str);
str = NULL;
if (str != NULL)
{
strcpy(str, "world");
printf(str);
}
}
int main() {
Test();
return 0;
}
边栏推荐
- "PHP8 Beginner's Guide" A brief introduction to PHP
- In the hot summer, teach you to use Xiaomi smart home accessories + Raspberry Pi 4 to connect to Apple HomeKit
- Basic properties of binary tree + oj problem analysis
- software management rpm
- 延迟加载js方式async与defer区别
- MySQL Foundation (1) - Basic Cognition and Operation
- 【无标题】
- [Decoding tools] Some online tools for Bitcoin
- entry point injection
- Structured light 3D reconstruction (1) Striped structured light 3D reconstruction
猜你喜欢

u-boot调试定位手段

【cesium】3D Tileset 模型加载并与模型树关联

Basic properties of binary tree + oj problem analysis
![coppercam primer [6]](/img/d3/a7d44aa19acfb18c5a8cacdc8176e9.png)
coppercam primer [6]
![[Surveying] Quick Summary - Excerpt from Gaoshu Gang](/img/35/e5c5349b8d4ccf9203c432a9aaee7b.png)
[Surveying] Quick Summary - Excerpt from Gaoshu Gang

结构光三维重建(二)线结构光三维重建

Qt制作18帧丘比特表白意中人、是你的丘比特嘛!!!

MySQL Foundation (1) - Basic Cognition and Operation

Flutter 父子组件如何都能收到点击事件

Flutter学习2-dart学习
随机推荐
结构光三维重建(一)条纹结构光三维重建
Transformation 和 Action 常用算子
社区分享|腾讯海外游戏基于JumpServer构建游戏安全运营能力
Flutter learning - the beginning
Day019 Method overriding and introduction of related classes
mysql数据库表什么字段类型的存储长度最大?
Algorithms - ones and zeros (Kotlin)
8.04 Day35-----MVC三层架构
Day14 jenkins部署
ESP32 485光照度
Returned object not currently part of this pool
LAB Semaphore Implementation Details
mutillidae download and installation
MySQL Foundation (1) - Basic Cognition and Operation
Redis - 13. Development Specifications
算法---一和零(Kotlin)
C语言-大白话理解原码,反码和补码
software management rpm
[Surveying] Quick Summary - Excerpt from Gaoshu Gang
Error creating bean with name 'configDataContextRefresher' defined in class path resource