当前位置:网站首页>[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;
}
边栏推荐
- Structured light 3D reconstruction (1) Striped structured light 3D reconstruction
- Flutter 父子组件如何都能收到点击事件
- 2022牛客多校第四场C.Easy Counting Problem(EGF+NTT)
- 2022 The 4th C.Easy Counting Problem (EGF+NTT)
- 延迟加载js方式async与defer区别
- Flutter Learning 4 - Basic UI Components
- C#关于set()和get()方法的理解及使用
- uva1325
- u-boot debugging and positioning means
- Distributed systems revisited: there will never be a perfect consistency scheme...
猜你喜欢
随机推荐
Flex layout frog game clearance strategy
「PHP8入门指南」PHP简明介绍
Flutter学习4-基本UI组件
The mall background management system based on Web design and implementation
[WeChat applet] WXML template syntax - conditional rendering
entry point injection
jvm three heap and stack
coppercam入门手册[6]
dedecms error The each() function is deprecated
Redis - 13. Development Specifications
upload upload pictures to Tencent cloud, how to upload pictures
[Surveying] Quick Summary - Excerpt from Gaoshu Gang
OFDM Lecture 16 5 -Discrete Convolution, ISI and ICI on DMT/OFDM Systems
人性的弱点
8.04 Day35-----MVC三层架构
Detailed explanation of each module of ansible
Error creating bean with name 'configDataContextRefresher' defined in class path resource
数字_获取指定位数的小数
Difference between for..in and for..of
MySQL中控制导出文件后变为了\N有什么解决方案吗?







