关于动态开辟内存的经典笔试题

简介: 关于动态开辟内存的经典笔试题

一、题目一💡💡

void GetMemory(char *p) {
 p = (char *)malloc(100);
}
void Test(void) {
 char *str = NULL;
 GetMemory(str);
 strcpy(str, "hello world");
 printf(str);
}

请问运行Test 函数会有什么样的结果?

Test函数运行会导致程序崩溃,该函数存在如下问题:

  • 对空指针解引用:虽然在GetMemory函数中动态申请了40个字节空间,但是程序调用完GetMemory之后,形参p就会消失,str得到的是一个空指针,strcpy函数和printf函数就是在对空指针进行解引用操作。
  • 动态开辟的内存空间没有释放

对错误代码进行修改:

void GetMemory(char **p) {
 p = (char *)malloc(100);
}
void Test(void) {
 char *str = NULL;
 GetMemory(&str);使str指向动态开辟的内存空间
 strcpy(str, "hello world");
 printf(str);
 free(str);//对动态开辟的内存进行释放
 str=NULL;
}

                   



目录
相关文章
|
1月前
|
编译器 C语言 C++
【C语言】realloc()函数详解(动态内存开辟函数)
【C语言】realloc()函数详解(动态内存开辟函数)
37 0
|
1月前
|
编译器 C++
C/C++动态内存开辟(详解)
C/C++动态内存开辟(详解)
|
12天前
|
程序员 C语言 C++
【C语言基础】:动态内存管理(含经典笔试题分析)-2
【C语言基础】:动态内存管理(含经典笔试题分析)
|
12天前
|
程序员 编译器 C语言
【C语言基础】:动态内存管理(含经典笔试题分析)-1
【C语言基础】:动态内存管理(含经典笔试题分析)
|
20天前
|
C语言
C语言学习记录——动态内存开辟常见的错误
C语言学习记录——动态内存开辟常见的错误
13 1
|
30天前
|
编译器 C++
内存对齐与内存开辟。结构体(struct),位段,枚举类型(enum),联合体(union)。
内存对齐与内存开辟。结构体(struct),位段,枚举类型(enum),联合体(union)
22 1
|
15天前
|
C语言
动态内存开辟(下)
动态内存开辟(下)
11 0
|
15天前
|
编译器 C语言
动态内存开辟(上)
动态内存开辟(上)
11 0
|
20天前
|
程序员 C语言 C++
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
37 0
|
1月前
|
编译器 程序员 C语言
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题(下)
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题
18 0