`
haoningabc
  • 浏览: 1483067 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

检查多重free

阅读更多
内核代码
make tags

view plaincopy to clipboardprint?
  
#include <stdio.h>  
#include <stdlib.h>  
   
   
   
void *  
debug_malloc(size_t size, const char *file, int line, const char *func)  
{  
        void *p;  
   
        p = malloc(size);  
        printf("%s:%d:%s:malloc(%ld): p=0x%lx\n",  
            file, line, func, size, (unsigned long)p);  
        return p;  
}  
   
#define malloc(s) debug_malloc(s, __FILE__, __LINE__, __func__)  
#define free(p)  do {                                                   \  
        printf("%s:%d:%s:free(0x%lx)\n", __FILE__, __LINE__,            \  
            __func__, (unsigned long)p);                                \  
        free(p);                                                        \  
} while (0)  
   
int  
main(int argc, char *argv[])  
{  
        char *p;  
        p = malloc(1024);  
        free(p);  
        return 0;  
}  
</stdlib.h></stdio.h>  
分享到:
评论

相关推荐

    C语言动态内存分配研究及应用.pdf

    在进行动态内存分配时,需要注意以下几点:首先要检查内存分配函数的返回值,确保内存分配成功;其次,动态分配的内存需要适时释放,避免内存泄漏;再次,要注意避免内存越界访问,这可能会导致程序崩溃。 动态内存...

    第8章-指针 -41

    - `free()`:例如,`free(arr);` 释放由`malloc()`、`calloc()`或`realloc()`分配的内存。 在使用这些函数时,务必包含`&lt;stdlib.h&gt;`头文件,并注意检查分配是否成功,避免空指针操作和内存泄漏。 8.8.3 void指针...

    猴子选大王课程设计总结.pdf

    程序首先输入猴子数量m和报数周期n,对猴子进行编号,然后在循环中不断检查并移除报数到n的猴子,直到只剩下一个猴子。这个过程体现了数据结构和算法在解决复杂问题中的作用,同时也锻炼了学生的数据抽象能力。 ...

    C 动态内存分配研究

    此外,采用良好的编程习惯,如始终检查内存分配是否成功、确保所有变量都得到初始化以及避免多重释放等,可以大大减少内存相关的错误。利用现代IDE中的调试工具和技术,比如静态代码分析和内存分析工具,可以帮助...

    Delphi之OOP对象模型.docx

    Delphi支持单一继承,即一个类只能有一个直接父类,但可以通过多重继承(如接口)来模拟多重继承的效果。 对象(Object)是类的实例,它们在运行时动态分配在堆上。对象引用实际上是一个指向对象内存地址的指针,...

    C_C++面试问题分类大汇总

    为了避免多重定义问题,只有一个C文件中需要对此变量赋初值。 10. for(;1;)循环的问题 for(;1;)循环等价于while(1)循环,它是一个无限循环,因为其条件永远为真。 11. do...while和while...do的区别 do......

    数据结构\答案第2章 线性表

    =null`则用来检查当前节点是否有后继节点。 6. 最后,链表的存储结构包括单链表、多重链表、动态链表和静态链表。每种类型的链表都有其特定的应用场景,如多重链表适用于多对多的关系,而动态链表则允许在运行时...

    高质量的C++编程指南

    通过这种方式,程序员可以确保头文件中的内容在编译过程中只被处理一次,避免了因多重包含同一个头文件而导致的错误。 最后,书中提到了一些关于函数声明和定义的内容,如`.h`、`.cpp`、`.c`文件扩展名,分别对应...

    Sublime Text v3.3111中文绿色优化版32位 64位

    例如,它的“多重选择”功能允许用户同时在多个位置进行编辑,大大提高了代码修改的效率。此外,“Goto Anything”特性让快速定位文件、函数或变量变得轻而易举,只需输入简单的关键词即可。还有“Distraction Free ...

    command_of_linux.rar_COMMAND_linux 磁盘

    - `grub-install`: GRUB(GRand Unified Bootloader)是Linux下的多重引导程序,`grub-install`用于安装GRUB到硬盘,使系统能够选择多个操作系统。 4. **其他命令** - `apt/yum`: 软件包管理器,用于安装、更新和...

    c++面试宝典

    而`malloc`和`free`是C语言中的内存管理函数,不处理对象构造和析构,不进行类型检查。 2. **delete与delete[]的区别**:`delete`用于单个对象的释放,而`delete[]`用于数组对象的释放。使用`delete[]`会依次调用...

    单晶解析软件shelxtl

    6. **结构验证**:通过R值、Free R值等指标评估结构合理性,同时检查键长键角是否符合化学规则。 7. **结果输出**:输出结构参数、电子密度图等,生成报告并准备发表。 ### 三、ShelXTL与其他软件的协同 在晶体学...

    高质量C++编程指南

    - **switch语句**:使用case语句代替多重if检查,提高代码可读性。 - **goto语句**:谨慎使用goto,以免引入不易追踪的控制流。 #### 5. 常量 - **常量必要性**:使用常量替代硬编码的数字或字符串,提高代码的可...

    D 语言详细教程

    - 继承与多态:D支持单一继承,但通过接口可以实现多重接口继承。多态通过虚函数和抽象类实现。 - 访问控制:D语言有public、private和protected三种访问修饰符,控制成员的可见性。 3. 模块与导入 - 模块:D...

    多远线性回归方程C语言程序

    此外,对于多变量线性回归,还需要考虑多重共线性问题,即自变量之间可能存在高度相关性,这可能影响模型的稳定性和预测能力。 总结来说,这个C语言程序提供了一个实现多变量线性回归的框架,通过高斯消元法解决...

    30道 C++ 常见面试题

    - 复杂声明通常涉及到多重指针或多级引用,需要注意层次和作用域。 #### 20. 内存的分配方式 - 参见上述“内存分配方式及其区别”。 #### 21. 基类的析构函数不是虚函数会带来什么问题? - 如果基类的析构函数...

    高质量C++_C编程指南

    - **CONST与#DEFINE的比较**:CONST关键字提供了类型安全的常量定义,而#DEFINE则没有类型检查。 - **常量定义规则**:定义常量时应遵循一定的规则,如使用全大写字母等。 - **类中的常量**:在类中定义常量时,需要...

    三维数组的实现

    用户可以输入三个坐标值`x`、`y`和`z`,程序将检查这些坐标是否在数组的有效范围内,并打印出指定位置的数据。 9. **释放内存**: ```c for (i = 0; i ; ++i) for (j = 0; j ; ++j) free((void*)a[i][j]); ...

    Delphi之OOP面向对向模型.docx

    对象是类的实例,它在内存中动态分配,并在不再使用时需要通过`Free`方法显式释放。对象引用实际上是一个指向堆中对象实例的指针,复制对象引用只会复制这个指针,而非整个对象。在Delphi中,对象通常通过变量、函数...

Global site tag (gtag.js) - Google Analytics