当前位置:网站首页>[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;
}
边栏推荐
- The underlying mechanism of the class
- Difference between for..in and for..of
- Please write the SparkSQL statement
- Detailed explanation of each module of ansible
- uva1325
- u-boot中的u-boot,dm-pre-reloc
- 入口点注入
- 多线程查询结果,添加List集合
- 1.3 mysql batch insert data
- Dashboard Display | DataEase Look at China: Data Presents China's Capital Market
猜你喜欢
Flex layout frog game clearance strategy
The role of DataContext in WPF
2022杭电多校第一场01
结构光三维重建(一)条纹结构光三维重建
RL强化学习总结(一)
【学习笔记之菜Dog学C】动态内存管理之经典笔试题
Flutter学习5-集成-打包-发布
Using QR codes to solve fixed asset management challenges
Flutter 父子组件如何都能收到点击事件
Dephi reverse tool Dede exports function name MAP and imports it into IDA
随机推荐
u-boot in u-boot, dm-pre-reloc
ansible各个模块详解
8.04 Day35-----MVC three-tier architecture
【转】什么是etcd
Shell(4)条件控制语句
Day019 Method overriding and introduction of related classes
淘宝账号如何快速提升到更高等级
Returned object not currently part of this pool
【解码工具】Bitcoin的一些在线工具
Requests库部署与常用函数讲解
Flutter learning 2-dart learning
Flutter learning three-Flutter basic structure and principle
The mall background management system based on Web design and implementation
C#关于set()和get()方法的理解及使用
LAB 信号量实现细节
Dephi逆向工具Dede导出函数名MAP导入到IDA中
[Surveying] Quick Summary - Excerpt from Gaoshu Gang
结构光三维重建(二)线结构光三维重建
【cesium】加载并定位 3D Tileset
多线程查询结果,添加List集合