经典的笔试题解析:内存泄漏问题忘记free与非法访问的问题

简介: 经典的笔试题解析:内存泄漏问题忘记free与非法访问的问题

请各位老铁欣赏一下,下面的简短代码:


1.内存泄漏问题忘记free!!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void getmemory(char** p, int num)
{
  *p = (char*)malloc(num);
}
void test()
{
  char* str = NULL;
  getmemory(&str, 100);
  strcpy(str, "hello world");
  printf("%s\n", str);
  //忘记释放
}
int main()
{
  test();
  return 0;
}


上述的代码,并没有多少错误,只不过就是忘记释放掉malloc开辟的空间罢了!!!


不过当运行一个较大的程序的时候,每次都申请空间而不去释放,可能会导致内存不足,从而……卡机!!!所以一定不要忘记释放动态内存开辟的空间!!!


0a2653c851af460fa595bd959398a8f1.png


2.非法访问问题!!


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void test()
{
  char* str = (char*)malloc(100);
  strcpy(str, "hello");
  free(str);  //在这里,已经释放掉str了!!
  if (str != NULL)
  {
  //str此时为野指针!
  //在这里进行非法访问!
  strcpy(str, "world");
  printf("%s\n", str);
  }
}
int main()
{
  test();
  return 0;
}


对于这个代码,在函数没有结束就已经使用:free(str); free完以后,malloc函数开辟的100个字节的空间,已经还给操作系统了,且str指针不会自动置为NULL(空指针)!!故此时,str为野指针!!!在后面进行strcpy(str, "world")拷贝的时候,就会进行非法访问!!


温馨小提示:


free完以后,一定要将指针置为NULL(空指针),否则这个指针,就为空指针!!


相关文章
|
18天前
|
Java
JVM之本地内存以及元空间,直接内存的详细解析
JVM之本地内存以及元空间,直接内存的详细解析
31 0
|
29天前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
40 9
|
1天前
|
机器学习/深度学习 算法 Linux
xenomai内核解析--实时内存管理--xnheap
Xenomai是一个实时操作系统(RTOS)层,用于Linux,旨在提供确定性的任务调度和服务。其内存管理机制包括一个名为xnheap的内存池,确保内存分配和释放的时间确定性,以满足硬实时系统的严格需求。
9 0
xenomai内核解析--实时内存管理--xnheap
|
2天前
|
缓存 Java 编译器
JMM内存模型 volatile关键字解析
JMM内存模型 volatile关键字解析
9 0
|
4天前
|
编译器
练习使用动态内存相关的4个函数:malloc、calloc、realloc、free
在了解使用动态内存相关的四个函数之前,我们先了解一下,为什么要有动态内存分配?
13 0
|
6天前
|
缓存 Linux
linux性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)
这些工具可以帮助你监视系统的内存使用情况、识别内存泄漏、找到高内存消耗的进程等。根据具体的问题和需求,你可以选择使用其中一个或多个工具来进行内存性能分析。注意,内存分析通常需要综合考虑多个指标和工具的输出,以便更好地理解系统的行为并采取相应的优化措施。
24 6
|
11天前
|
算法 安全 Linux
深度解析:Linux内核内存管理机制
【4月更文挑战第30天】 在操作系统领域,内存管理是核心功能之一,尤其对于多任务操作系统来说更是如此。本文将深入探讨Linux操作系统的内核内存管理机制,包括物理内存的分配与回收、虚拟内存的映射以及页面替换算法等关键技术。通过对这些技术的详细剖析,我们不仅能够理解操作系统如何高效地利用有限的硬件资源,还能领会到系统设计中的性能与复杂度之间的权衡。
|
16天前
|
程序员 编译器 C语言
C语言知识:动态内存管理(malloc free calloc realloc)
C语言知识:动态内存管理(malloc free calloc realloc)
|
16天前
|
存储 编译器 C语言
C语言基础知识:数据在内存中的存储解析(整数,浮点数)
C语言基础知识:数据在内存中的存储解析(整数,浮点数)
|
15天前
|
Linux
Linux rsyslog占用内存CPU过高解决办法
该文档描述了`rsyslog`占用内存过高的问题及其解决方案。
40 4

推荐镜像

更多