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()函数的内存释放有关问题相关推荐

  1. java内存块_JVM上的并发和Java内存模型之同步块笔记

    本文来自 图灵社区@fairjm 转截请注明出处 这个是书的笔记 书可以在safaribooksonline看,话说这个真的是一个很好的读外文书的网站啊,一个月39刀就可以畅想全站的书,很值.(订订订 ...

  2. linux 查看共享内存最大值,linux上更改共享内存的最大值

    linux下更改共享内存的最大值 System V IPC 参数 名字 描述 合理取值 SHMMAX 最大共享内存段尺寸(字节) 最少若干兆(见文本) SHMMIN 最小共享内存段尺寸(字节) 1 S ...

  3. Linux倒序赋值用molloc函数,请教一个C语言函数malloc的问题

    halazi100 于 2014-11-27 16:24:42发表: malloc和free的原理 一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *mal ...

  4. linux内核函数kmalloc,Linux_Linux平台上几个常见内核内存分配函数,* kmallocPrototype:#incl - phpStudy...

    Linux平台上几个常见内核内存分配函数 * kmalloc Prototype: #include void *kmalloc(size_t size, int flags); Kmalloc分配一 ...

  5. Linux堆内存管理深入分析(上)

    Linux堆内存管理深入分析 (上半部) 作者:走位@阿里聚安全   0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏 ...

  6. linux 在某个core上的中断 affinity c语言函数,Linux中断处理体系结构

    各种的异常的C处理函数可以分为5类,他们分布在不同的文件中. 1.在arch/arm/kernel/trapsc.c中 未定义指令异常,总入口函数为do_undefinstr. 2.在arch/arm ...

  7. brk函数 linux,brk和sbrk及内存分配函数相关-linux+内存

    brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: 每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空 ...

  8. 操作系统知识整理——Linux下进程的内存布局以及brk()、sbrk()函数探究

    文章目录 前言 一.内存堆栈模型 二.系统栈和用户栈 三.函数调用时的内存栈分配 四.brk(), sbrk() 用法详解 前言 本篇文章是自己在学习xv6操作系统内核时,发现自己对进程在内存中的布局 ...

  9. linux内存系统管理,Linux内存管理之伙伴系统(内存释放)

    Linux内核伙伴系统中页面释放,主函数为free_pages() 一.上层操作 void free_pages(unsigned long addr, unsigned int order){if ...

最新文章

  1. TensorFlow多元线性回归实现
  2. C语言编程的Debug版和Release版
  3. python操作手机app_【Python】[技术博客] 一些使用Python编写获取手机App日志的操作...
  4. 小学计算机ppt课教案,小学信息技术公开课教案《让幻灯片变得更加漂亮》教学设计与反思...
  5. linux内核高分辨率定时器,64位Linux上的高分辨率定时器支持
  6. [转载]中国公历算法
  7. Windows API GetProcAddress 及demo code
  8. ZABBIX监控JAVA日志文件
  9. Linux下能访问Nginx,本地无法访问
  10. 软件测试用例模板和例子_如何编写测试用例?
  11. pythontransform详解_Python自定义聚合函数merge与transform区别详解
  12. pcb天线设计和hfss仿真分析实例_5G天线与多天线系统设计
  13. 外接显示器,多屏幕显示,出现鼠标移动缓慢,卡顿
  14. python通配符_Python通配符一览
  15. 靶机渗透练习04-driftingblues4
  16. yxy小蒟蒻的201117总结
  17. RepVGG:算法简介及repvgg.py代码解析
  18. 组织架构图,比较实用,收走
  19. arcgis api for javaScript学习-Measurement
  20. 用的五大bug管理工具的优缺点和下载地址

热门文章

  1. 历届奥运会中国金牌榜 !
  2. 零元学Expression Blend 4 ndash; Chapter 20 以实作案例学习Childwindow
  3. 【每天一个java设计模式(十五)】 - 命令模式
  4. Cops and Robbers(最大流 最小割)
  5. Java使用BouncyCastle进行基于ECDSA算法的椭圆曲线secp256r1证书自签名
  6. 天天写order by,你知道Mysql底层执行原理吗?
  7. 出生率低下,母婴行业有待堪忧,2022母婴前景如何?商家如何做?
  8. sockjs.js?9be2:1609 GET http://192.168.0.121:8080/sockjs-node/info?t=1619326975370 net::ERR_INTERNET
  9. 一个简单漂亮好用的甘特图软件
  10. ERP初阶(七):八十年代的MRPII