c语言 函数strdup,strdup函数使用误区
在项目中看到有同事使用strdup函数后没有释放内存,在google搜索后发现许多网站中给的代码例子中使用完之后并未释放内存,存在一定程度上的误导。
// C program to demonstrate strdup()
#include
#include
int main()
{
char source[] = "GeeksForGeeks";
// A copy of source is created dynamically
// and pointer to copy is returned.
char* target = strdup(source);
printf("%s", source);
return 0;
}
上面代码未释放target指针所指向的内存,因此存在内存泄露,使用valgrind验证结果如下:
[root@centos-7 workspace]# valgrind --leak-check=yes ./strdup
==9264== Memcheck, a memory error detector
==9264== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==9264== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==9264== Command: ./strdup
==9264==
GeeksForGeeks
==9264==
==9264== HEAP SUMMARY:
==9264== in use at exit: 14 bytes in 1 blocks
==9264== total heap usage: 1 allocs, 0 frees, 14 bytes allocated
==9264==
==9264== 14 bytes in 1 blocks are definitely lost in loss record 1 of 1
==9264== at 0x4C29E33: malloc (vg_replace_malloc.c:299)
==9264== by 0x4EC3809: strdup (in /usr/lib64/libc-2.17.so)
==9264== by 0x40058B: main (strdup.c:11)
==9264==
==9264== LEAK SUMMARY:
==9264== definitely lost: 14 bytes in 1 blocks
==9264== indirectly lost: 0 bytes in 0 blocks
==9264== possibly lost: 0 bytes in 0 blocks
==9264== still reachable: 0 bytes in 0 blocks
==9264== suppressed: 0 bytes in 0 blocks
==9264==
==9264== For counts of detected and suppressed errors, rerun with: -v
==9264== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
[root@centos-7 workspace]#
正确的程序如下:
// C program to demonstrate strdup()
#include
#include
#include
int main()
{
char source[] = "GeeksForGeeks";
// A copy of source is created dynamically
// and pointer to copy is returned.
char* target = strdup(source);
printf("%s\n", source);
free(target);
return 0;
}
c语言 函数strdup,strdup函数使用误区相关推荐
- C语言 -- string.h中函数功能详解与手动实现 - 02(常用函数memcpy、memmove、strcpy、strdup、strcat、strtok...)
内容预览 3.5.搬迁类型 --- 函数功能详细说明 :将内存空间中内容移动.复制到另一内存空间 3.6.搬迁类型 --- 函数功能测试与手动实现 3.6.1.memcpy.memccpy 3.6.2 ...
- linux C函数之strdup函数分析【转】
本文转载自:http://blog.csdn.net/tigerjibo/article/details/12784823 linux C函数之strdup函数分析 一.函数分析 1.函数原型: [c ...
- linux C函数之strdup函数分析
本文转载自:http://blog.csdn.net/tigerjibo/article/details/12784823 linux C函数之strdup函数分析 一.函数分析 1.函数原型: #i ...
- perm函数c语言_理解C语言(三) 字符串处理函数
1 字符串基础 字符串是一种重要的数据类型,有零个或多个字符组成的有限串行. 定义子串: 串中任意个连续的字符组成的子序列,并规定空串是任意串的子串,任意串也是其自身的子串,如字符串"ade ...
- 缓冲区溢出攻击-C语言中的危险函数
1.缓冲区溢出攻击 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上.理想的情况是:程序会检查数据长度,而且并不允许输入超过缓冲区长度的字符.但是绝大多 ...
- 探索C语言之字符串分割函数:strtok和strsep的区别
探索C语言之字符串分割函数:strtok和strsep的区别 概述 strsep - extract token from string(linux 下) strtok, strtok_r - ext ...
- C语言中的字符串函数
函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio. ...
- 【老九学堂】【初识C语言】常用字符串函数
1.函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: 程序例: 2.函数名: strcat 功 能: 字符串拼接函数 用 法: 程序例: 3.函数名: strchr 功 能: 在一个 ...
- c语言随机数生成0 99函数,C语言生成随机数的函数、延时函数
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 下面C语言代码使用了生成随机数的函数.延时函数.请大家仔细观察其显示效果. 从以下代码,我们可以得出一个重要的结论:当上述两类函数被放入循环时,应作出一定 ...
- c++语言函数大全,C++函数
本篇文章帮大家学习C++函数,包含了C++函数使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. C++语言中的函数在其他编程语言中也称为过程或子例程. 我们可以创建函数来执 ...
最新文章
- sklearn快速入门教程:补充内容 -- sklearn模型评价指标汇总(聚类、分类、回归)
- 【网址收藏】k8s zookeeper-operator示例
- WPF 透明窗口在桌面上放虫子。。。
- Silverlight 设计器加载错误
- 王道考研 计算机网络19 传输层 传输层的寻址与端口 TCP UDP
- 用LuaBridge为Lua绑定C/C++对象
- MySQL 分组查询
- 三级网络技术_中小型网络系统总体规划与设计方法
- leetcode题库53-- 最大子序和
- 把代码写成艺术,真正体会面向对象编程思想
- 纸娃娃系统(摘自百科)
- 西门子PLC程序调试方法
- Android平台渗透测试套件--zANTI2.5
- 整合营销系统推荐乐云seo_重庆整合营销【乐云seo】
- torch中Tensor的使用
- Chrome 浏览器安装Vue2、Vue3插件方法
- System.Net.Mail发邮件标题过长出现乱码问题
- ZENCART首页显示 Featured Categorie的方法
- 如何检查显卡支持哪个版本的CUDA ?
- android 提醒app,安卓手机上提醒工作的软件有哪些?
热门文章
- 《Adobe Premiere Pro视频编辑指南(第2版)》——自定制Source/Program的功能按钮
- mixly for Mac以及Arduino uno开发板的使用
- 看不到下雪,就用Python制造雪景图
- 缓解压力,情绪低落食品
- PAT 1089 狼人杀-简单版(20 分)(代码+测试点分析)
- 毕业生自传(南柯一梦)
- 网络安全入行?来了解下网络安全从业人员类别及其工作任务
- 关键字过滤 java_java 关键字过滤
- 【就你不知道-Flex 自定义事件-龙骑士之死】(2012-05-25 08:29)
- UE4_IFmaterial 通过红色通道渲染4个色块