linux释放内存函数,LINUX上的getifaddrs()函数的内存释放有关问题
LINUX上的getifaddrs()函数的内存释放有关问题
LINUX上的getifaddrs()函数的内存释放有关问题
日期:2014-05-16 浏览次数:20386 次
LINUX下的getifaddrs()函数的内存释放问题
LINUX下的getifaddrs()函数的内存释放问题
在LINUX下获取网卡信息需要用到IOCTL或者getifaddrs
而我在用getifaddrs的时候遇到了内存方面的问题
先看相关定义:
==========
函数定义:
/* Create a linked list of `struct ifaddrs' structures, one for each
network interface on the host machine. If successful, store the
list in *IFAP and return 0. On errors, return -1 and set `errno'.
The storage returned in *IFAP is allocated dynamically and can
only be properly freed by passing it to `freeifaddrs'. */
extern int getifaddrs (struct ifaddrs **__ifap) __THROW;
/* Reclaim the storage allocated by a previous `getifaddrs' call. */
extern void freeifaddrs (struct ifaddrs *__ifa) __THROW;
==============
此函数需要的结构体定义:
struct ifaddrs
{
struct ifaddrs *ifa_next; /* Pointer to the next structure. */
char *ifa_name; /* Name of this network interface. */
unsigned int ifa_flags; /* Flags as from SIOCGIFFLAGS ioctl. */
struct sockaddr *ifa_addr; /* Network address of this interface. */
struct sockaddr *ifa_netmask; /* Netmask of this interface. */
union
{
/* At most one of the following two is valid. If the IFF_BROADCAST
bit is set in `ifa_flags', then `ifa_broadaddr' is valid. If the
IFF_POINTOPOINT bit is set, then `ifa_dstaddr' is valid.
It is never the case that both these bits are set at once. */
struct sockaddr *ifu_broadaddr; /* Broadcast address of this interface. */
struct sockaddr *ifu_dstaddr; /* Point-to-point destination address. */
} ifa_ifu;
/* These very same macros are defined by for `struct ifaddr'.
So if they are defined already, the existing definitions will be fine. */
# ifndef ifa_broadaddr
# define ifa_broadaddr ifa_ifu.ifu_broadaddr
# endif
# ifndef ifa_dstaddr
# define ifa_dstaddr ifa_ifu.ifu_dstaddr
# endif
void *ifa_data; /* Address-specific data (may be unused). */
};
=============
我在调用了getifaddrs()之后,正常地完成了需要的工作
但是最后如果用freeifaddrs,则出现运行时错误
*** glibc detected *** d: free(): invalid pointer: 0x0804a4d4 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7eda911]
/lib/libc.so.6(__libc_free+0x84)[0xb7edbf84]
/lib/libc.so.6(freeifaddrs+0x1d)[0xb7f512dd]
d[0x8048989]
d[0x80486a5]
/lib/libc.so.6(__libc_start_main+0xdc)[0xb7e8c87c]
d[0x8048491]
======= Memory map: ========
08048000-08049000 r-xp 00000000 03:07 48637 /home/souldump/bin/d
08049000-0804a000 rw-p 00000000 03:07 48637 /home/souldump/bin/d
0804a000-0806b000 rw-p 0804a000 00:00 0 [heap]
b7d00000-b7d21000 rw-p b7d00000 00:00 0
b7d21000-b7e00000 ---p b7d21000 00:00 0
b7e76000-b7e77000 rw-p b7e76000 00:00 0
b7e77000-b7f90000 r-xp 00000000 03:05 16184 /lib/libc-2.4.so
b7f90000-b7f92000 r--p 00118000 03:05 16184 /lib/libc-2.4.so
b7f92000-b7f94000 rw-p 0011a000 03:05 16184 /lib/libc-2.4.so
b7f94000-b7f98000 rw-p b7f94000 00:00 0
b7fab000-b7fb5000 r-xp 00000000 03:05 20108 /lib/libgcc_s.so.1
b7fb5000-b7fb6000 rw-p 00009000 03:05 20108 /lib/libgcc_s.so.1
b7fb6000-b7fb7000 rw-p b7fb6000 00:00 0
b7fb7000-b7fd1000 r-xp 00000000 03:05 16177 /
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
linux释放内存函数,LINUX上的getifaddrs()函数的内存释放有关问题相关推荐
- java内存块_JVM上的并发和Java内存模型之同步块笔记
本文来自 图灵社区@fairjm 转截请注明出处 这个是书的笔记 书可以在safaribooksonline看,话说这个真的是一个很好的读外文书的网站啊,一个月39刀就可以畅想全站的书,很值.(订订订 ...
- linux 查看共享内存最大值,linux上更改共享内存的最大值
linux下更改共享内存的最大值 System V IPC 参数 名字 描述 合理取值 SHMMAX 最大共享内存段尺寸(字节) 最少若干兆(见文本) SHMMIN 最小共享内存段尺寸(字节) 1 S ...
- Linux倒序赋值用molloc函数,请教一个C语言函数malloc的问题
halazi100 于 2014-11-27 16:24:42发表: malloc和free的原理 一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *mal ...
- linux内核函数kmalloc,Linux_Linux平台上几个常见内核内存分配函数,* kmallocPrototype:#incl - phpStudy...
Linux平台上几个常见内核内存分配函数 * kmalloc Prototype: #include void *kmalloc(size_t size, int flags); Kmalloc分配一 ...
- Linux堆内存管理深入分析(上)
Linux堆内存管理深入分析 (上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏 ...
- linux 在某个core上的中断 affinity c语言函数,Linux中断处理体系结构
各种的异常的C处理函数可以分为5类,他们分布在不同的文件中. 1.在arch/arm/kernel/trapsc.c中 未定义指令异常,总入口函数为do_undefinstr. 2.在arch/arm ...
- brk函数 linux,brk和sbrk及内存分配函数相关-linux+内存
brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空 ...
- 操作系统知识整理——Linux下进程的内存布局以及brk()、sbrk()函数探究
文章目录 前言 一.内存堆栈模型 二.系统栈和用户栈 三.函数调用时的内存栈分配 四.brk(), sbrk() 用法详解 前言 本篇文章是自己在学习xv6操作系统内核时,发现自己对进程在内存中的布局 ...
- linux内存系统管理,Linux内存管理之伙伴系统(内存释放)
Linux内核伙伴系统中页面释放,主函数为free_pages() 一.上层操作 void free_pages(unsigned long addr, unsigned int order){if ...
最新文章
- TensorFlow多元线性回归实现
- C语言编程的Debug版和Release版
- python操作手机app_【Python】[技术博客] 一些使用Python编写获取手机App日志的操作...
- 小学计算机ppt课教案,小学信息技术公开课教案《让幻灯片变得更加漂亮》教学设计与反思...
- linux内核高分辨率定时器,64位Linux上的高分辨率定时器支持
- [转载]中国公历算法
- Windows API GetProcAddress 及demo code
- ZABBIX监控JAVA日志文件
- Linux下能访问Nginx,本地无法访问
- 软件测试用例模板和例子_如何编写测试用例?
- pythontransform详解_Python自定义聚合函数merge与transform区别详解
- pcb天线设计和hfss仿真分析实例_5G天线与多天线系统设计
- 外接显示器,多屏幕显示,出现鼠标移动缓慢,卡顿
- python通配符_Python通配符一览
- 靶机渗透练习04-driftingblues4
- yxy小蒟蒻的201117总结
- RepVGG:算法简介及repvgg.py代码解析
- 组织架构图,比较实用,收走
- arcgis api for javaScript学习-Measurement
- 用的五大bug管理工具的优缺点和下载地址
热门文章
- 历届奥运会中国金牌榜 !
- 零元学Expression Blend 4 ndash; Chapter 20 以实作案例学习Childwindow
- 【每天一个java设计模式(十五)】 - 命令模式
- Cops and Robbers(最大流 最小割)
- Java使用BouncyCastle进行基于ECDSA算法的椭圆曲线secp256r1证书自签名
- 天天写order by,你知道Mysql底层执行原理吗?
- 出生率低下,母婴行业有待堪忧,2022母婴前景如何?商家如何做?
- sockjs.js?9be2:1609 GET http://192.168.0.121:8080/sockjs-node/info?t=1619326975370 net::ERR_INTERNET
- 一个简单漂亮好用的甘特图软件
- ERP初阶(七):八十年代的MRPII