zoukankan      html  css  js  c++  java
  • Linux 下用 valgrind 查找内存泄漏小例子

    1.安装 valgrind

      yum install valgrind

    2.测试用例

    main.cpp

    #include <iostream>
    
    using namespace std;
    
    struct StockInfo
    {
        int iMarket;
        string sCode;
        
        StockInfo()
        : iMarket(0)
        {
        }
    };
    
    int main()
    {
        StockInfo *pStockInfo = new StockInfo;
        pStockInfo->iMarket = 1;
        pStockInfo->sCode = "000001";
        cout << "Market:" << pStockInfo->iMarket << "|" << "Code:" << pStockInfo->sCode << endl;
        
        //delete pStockInfo;
        return 0;
    }

    makefile

    TARGET=main
    
    INC=
    LIB_PATH=
    LIB=
    
    CFLAGS:=-Wall -g -O0 -lrt -rdynamic -fPIC -Wl,-rpath=./ $(INC) $(LIB_PATH)
    CPPFLAGS:=$(CFLAGS)
    
    SRC=$(shell echo *.cpp)
    OBJ=$(patsubst %.cpp,%.o,$(SRC))
    
    all: $(TARGET)
    
    $(TARGET): $(OBJ)
    	$(CXX) $^ $(CFLAGS) $(LIB) -o $@
    
    clean:
    	rm -f $(OBJ)
    	rm -f $(TARGET)
    

    make 编译生成可执行文件:

    3.使用 valgrind 检查内存泄漏:

      valgrind --tool=memcheck --leak-check=full ./main

    main.cpp第18行: 

      StockInfo *pStockInfo = new StockInfo;
    new 的指针,没有释放,造成内存泄漏。
     
    加上 
      delete pStockInfo;
    之后就没有内存泄漏了:
  • 相关阅读:
    命令
    碎片知识
    驱动问题
    网络基础知识普及
    面向设计大作业——公司餐厅
    面向对象--购物车
    OO之接口-DAO模式代码阅读及应用
    有理数类的定义
    图知识点总结
    Java课程设计总结
  • 原文地址:https://www.cnblogs.com/SZxiaochun/p/8435498.html
Copyright © 2011-2022 走看看