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

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

一、题目一💡💡

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语言
动态内存分配与管理详解(附加笔试题分析)(上)
动态内存分配与管理详解(附加笔试题分析)
49 1
|
1月前
|
程序员 编译器 C语言
动态内存分配与管理详解(附加笔试题分析)(下)
动态内存分配与管理详解(附加笔试题分析)(下)
46 2
|
5月前
|
程序员 C语言 C++
【C语言基础】:动态内存管理(含经典笔试题分析)-2
【C语言基础】:动态内存管理(含经典笔试题分析)
|
5月前
|
程序员 编译器 C语言
【C语言基础】:动态内存管理(含经典笔试题分析)-1
【C语言基础】:动态内存管理(含经典笔试题分析)
|
5月前
|
C语言
C语言学习记录——动态内存开辟常见的错误
C语言学习记录——动态内存开辟常见的错误
33 1
|
6月前
|
编译器 C++
内存对齐与内存开辟。结构体(struct),位段,枚举类型(enum),联合体(union)。
内存对齐与内存开辟。结构体(struct),位段,枚举类型(enum),联合体(union)
38 1
|
5月前
|
C语言
动态内存开辟(下)
动态内存开辟(下)
22 0
|
5月前
|
编译器 C语言
动态内存开辟(上)
动态内存开辟(上)
25 0
|
5月前
|
程序员 C语言 C++
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
128 0