Valgrind使用介紹

1. valgrind介紹

Valgrind是用于構(gòu)建動(dòng)態(tài)分析工具的裝備性框架。它包括一個(gè)工具集,每個(gè)工具執(zhí)行某種類型的調(diào)試、分析或類似的任務(wù),以幫助完善你的程序。Valgrind的架構(gòu)是模塊化的,所以可以容易的創(chuàng)建新的工具而又不會(huì)擾亂現(xiàn)有的結(jié)構(gòu)。

典型情況下,Valgrind會(huì)提供如下一系列的有用工具:

  • Memcheck 是一個(gè)內(nèi)存錯(cuò)誤偵測(cè)器。它有助于使你的程序,尤其是那些采用C或C 來寫的程序,更加準(zhǔn)確;

  • Cachegrind 是一個(gè)緩存和分支預(yù)測(cè)分析器。其有助于你提高程序的運(yùn)行性能;

  • Callgrind 是一個(gè)調(diào)用圖緩存生成分析器。它與Cachegrind的功能有重疊,但是也收集Cachegrind不收集的一些信息;

  • Helgrind 是一個(gè)線程錯(cuò)誤檢測(cè)器。它有助于使你的多線程程序更加準(zhǔn)確;

  • DRD 也是一個(gè)線程錯(cuò)誤檢測(cè)器。它和Helgrind相似,但使用不同的分析技術(shù),所以可能找到不同的問題;

  • Massif 是一個(gè)堆分析器。它有助于使你的程序使用更少的內(nèi)存;

  • DHAT 是另一種不同的堆分析器。它有助于理解塊(block)的生命周期、塊的使用和布局的低效等問題;

  • SGcheck 是一個(gè)仍處于試驗(yàn)狀態(tài)的工具,用來檢測(cè)堆和全局?jǐn)?shù)組的溢出。它的功能和Memcheck互補(bǔ):SGcheck能找到一些Memcheck無法找到的問題,反之亦然;

  • BBV 是一個(gè)仍處于試驗(yàn)狀態(tài)的SimPoint基本款矢量生成器。它對(duì)于進(jìn)行計(jì)算機(jī)架構(gòu)的研究和開發(fā)很有用處。

另外,也有一些大多數(shù)用戶不會(huì)用到的小工具: Lackey是一個(gè)示例工具,用于演示一些裝備的基礎(chǔ)性內(nèi)容;Nulgrind是一個(gè)最小化的Valgrind工具,不做分析或者操作,僅用于測(cè)試目的。

1.1 valgind工具詳解

1) Memcheck

最常用的工具,用來檢測(cè)程序中出現(xiàn)的內(nèi)存問題,所有對(duì)內(nèi)存的讀寫都會(huì)被檢測(cè)到,一切對(duì)malloc、free、new、delete的調(diào)用都會(huì)被捕獲。所以,它能檢測(cè)以下問題:

1. 對(duì)未初始化內(nèi)存的使用;

2. 讀/寫釋放后的內(nèi)存塊;

3. 讀/寫超出malloc分配的內(nèi)存塊;

4. 讀/寫不適當(dāng)?shù)臈V袃?nèi)存塊;

5. 內(nèi)存泄露,指向一塊內(nèi)存的指針永遠(yuǎn)丟失;

6. 不正確的malloc/free或者new/delete匹配;

7. memcpy()相關(guān)函數(shù)中的dst和src指針重疊;

這些問題往往是C/C 程序員最頭疼的問題,Memcheck能在這里幫上大忙。

2) Callgrind

和gprof類似的分析工具,但它對(duì)程序的運(yùn)行觀察更為入微,能給我們提供更多的信息。和gprof不同的是,它不需要在編譯源代碼時(shí)附加特殊選項(xiàng),但還是推薦加上調(diào)試選項(xiàng)。Callgrind收集程序運(yùn)行時(shí)的一些數(shù)據(jù),建立函數(shù)調(diào)用關(guān)系圖,還可以有選擇地進(jìn)行cache模擬。在運(yùn)行結(jié)束時(shí),它會(huì)把分析數(shù)據(jù)寫入一個(gè)文件。callgrind_annotate可以把這個(gè)文件的內(nèi)容轉(zhuǎn)化成可讀的形式。

3) Cachegrind

Cache分析器,它模擬CPU中的一級(jí)緩存和二級(jí)緩存,能夠精確地指出程序中cache的丟失和命中。如果需要,它還能夠?yàn)槲覀兲峁ヽache丟失次數(shù),內(nèi)存引用次數(shù),以及每行代碼,每個(gè)函數(shù),每個(gè)模塊,整個(gè)程序產(chǎn)生的指令數(shù)。這對(duì)優(yōu)化程序有很大的幫助。

做一下廣告:valgrind自身利用該工具在過去幾個(gè)月使性能提高了25%~30%。據(jù)早先報(bào)道, kde的開發(fā)team也對(duì)valgrind在提高kde性能方面的幫助表示感謝。

4) Helgrind

它主要用來檢查多線程程序中出現(xiàn)的競(jìng)爭(zhēng)問題。Helgrind尋找內(nèi)存中被多個(gè)線程訪問,而又沒有一貫加鎖的區(qū)域,這些區(qū)域往往是線程之間失去同步的地方,而且會(huì)導(dǎo)致難以發(fā)覺的錯(cuò)誤。Helgrind實(shí)現(xiàn)了名為Eraser的競(jìng)爭(zhēng)檢測(cè)算法,并做了進(jìn)一步改進(jìn),減少了報(bào)告錯(cuò)誤的次數(shù)。不過,Helgrind仍然處于實(shí)驗(yàn)狀態(tài)。

5) Massif

堆棧分析器,它能測(cè)量程序在堆棧中使用了多少內(nèi)存,告訴我們堆塊,堆管理塊和棧的大小。Massif能幫助我們減少內(nèi)存的使用,在帶有虛擬內(nèi)存的現(xiàn)代系統(tǒng)中,它還能夠加速我們程序的運(yùn)行,減少程序停留在交換區(qū)中的幾率。

Massif對(duì)內(nèi)存的分配和釋放做profile。程序開發(fā)者通過它可以深入了解程序的內(nèi)存使用行為,從而對(duì)內(nèi)存使用進(jìn)行優(yōu)化。這個(gè)功能對(duì)C 尤其有用,因?yàn)镃 有很多隱藏的內(nèi)存分配和釋放。

1.2 valgrind的安裝

1. yum安裝

# yum search valgrind Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com ==================== N/S matched: valgrind ======================================== valgrind-devel.i686 : Development files for valgrind valgrind-devel.x86_64 : Development files for valgrind valgrind-openmpi.x86_64 : OpenMPI support for valgrind valgrind.i686 : Tool for finding memory management bugs in programs valgrind.x86_64 : Tool for finding memory management bugs in programs Name and summary matches only, use "search all" for everything. # yum install valgrind

2.源碼編譯安裝

安裝所需依賴

# yum install autoconf # yum install automake

下載安裝包(官網(wǎng)下載地址

# mkdir valgrind-inst
# cd valgrind-intst/
# wget http://www.valgrind.org/downloads/valgrind-3.14.0.tar.bz2
# ls
valgrind-3.14.0.tar.bz2

安裝valgrind

# tar -jxvf valgrind-3.14.0.tar.bz2 # cd valgrind-3.14.0 # ./autogen.sh running: aclocal running: autoheader running: automake -a running: autoconf # ./configure # make # make install # valgrind --version valgrind-3.14.0 # which valgrind /usr/local/bin/valgrind

1.3 valgrind常用選項(xiàng)

valgrind的基本使用格式如下:

valgrind [options] prog-and-args

其支持眾多選項(xiàng),我們可以通過valgrind --help來進(jìn)行查看。這里我們只介紹幾個(gè)較為常用的選項(xiàng):

[options]

常用選項(xiàng),適用于所有Valgrind工具

--tool=<name> 是最常用的選項(xiàng),用于選擇使用valgrind工具集中的哪一個(gè)工具,默認(rèn)值為memcheck;

-v/--version 顯示valgrind內(nèi)核的版本,每個(gè)工具都有各自的版本;

-h/–help 顯示幫助信息;

-q --quiet 安靜的運(yùn)行,只打印錯(cuò)誤消息;

-v -–verbose 打印更詳細(xì)的信息

--trace-children=no|yes 是否跟蹤子進(jìn)程,默認(rèn)值為no;

--track-fds=no|yes 是否追蹤打開的文件描述符,默認(rèn)為no;

--time-stamp=no|yes 是否在打印出的每條消息之前加上時(shí)間戳信息,默認(rèn)值為no

--log-fd=<number> 輸出LOG到描述符文件 [2=stderr]

--log-file=<file> 指定將消息打印到某個(gè)文件

--log-file-exactly=<file> 輸出LOG信息到 file

--log-file-qualifier=<VAR> 取得環(huán)境變量的值來做為輸出信息的文件名,[none]

--log-socket=ipaddr:port 輸出LOG到socket,ipaddr:port

LOG信息輸出

--xml=yes 將信息以xml格式輸出,只有memcheck可用

--num-callers=<number> show <number> callers in stack traces [12]

--error-limit=no|yes 如果太多錯(cuò)誤,則停止顯示新錯(cuò)誤? [yes]

--error-exitcode=<number> 如果發(fā)現(xiàn)錯(cuò)誤則返回錯(cuò)誤代碼 [0=disable]

--db-attach=no|yes 當(dāng)出現(xiàn)錯(cuò)誤,valgrind會(huì)自動(dòng)啟動(dòng)調(diào)試器gdb。[no]

--db-command=<command> 啟動(dòng)調(diào)試器的命令行選項(xiàng)[gdb -nw %f %p]

適用于Memcheck工具的相關(guān)選項(xiàng):

--leak-check=no|summary|full 在退出時(shí)是否查找內(nèi)存泄露。默認(rèn)值為summary

--leak-resolution=low|med|high how much bt merging in leak check [low]

--show-reachable=no|yes show reachable blocks in leak check? [no]

最常用的命令格式:

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

2. Memcheck的使用

這里我們主要講述一下valgrind中memcheck工具的使用。該工具可以檢測(cè)下列與內(nèi)存相關(guān)的問題:

  • 未初始化內(nèi)存的使用;

  • 對(duì)釋放后內(nèi)存的讀/寫;

  • 對(duì)已分配內(nèi)存塊尾部的讀/寫;

  • 內(nèi)存泄露;

  • 不匹配的使用malloc/free、new/delete、new[]/delete[]

  • 重復(fù)釋放內(nèi)存

上面列出的并不是很全面,但卻包含了能被該工具檢測(cè)到的很多普遍問題。下面我們會(huì)一個(gè)個(gè)的對(duì)上面的場(chǎng)景進(jìn)行討論。

注意:下面討論的所有測(cè)試代碼在編譯時(shí)最好都加上-g選項(xiàng)(用來在memcheck的輸出中生成行號(hào))進(jìn)行編譯。

2.1 使用未初始化的內(nèi)存

1) 示例程序

#include <stdio.h>
#include <stdlib.h> 
 
int main(void)
{
    char *p; 
 
    char c = *p; 
 
    printf("\n [%c]\n",c); 
 
    return 0;
}

在上面的代碼中,我們嘗試使用未初始化的指針p。

2) 調(diào)試技巧

如下我們運(yùn)行Memcheck來看下結(jié)果:

# gcc -g -c -o test.o test.c
# gcc -o test test.o
 
# valgrind --tool=memcheck ./test
==5918== Memcheck, a memory error detector
==5918== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==5918== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==5918== Command: ./test
==5918== 
==5918== Use of uninitialised value of size 8
==5918==    at 0x400539: main (test.c:8)
==5918== 
==5918== Invalid read of size 1
==5918==    at 0x400539: main (test.c:8)
==5918==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==5918== 
==5918== 
==5918== Process terminating with default action of signal 11 (SIGSEGV)
==5918==  Access not within mapped region at address 0x0
==5918==    at 0x400539: main (test.c:8)
==5918==  If you believe this happened as a result of a stack
==5918==  overflow in your program's main thread (unlikely but
==5918==  possible), you can try to increase the size of the
==5918==  main thread stack using the --main-stacksize= flag.
==5918==  The main thread stack size used in this run was 8388608.
==5918== 
==5918== HEAP SUMMARY:
==5918==     in use at exit: 0 bytes in 0 blocks
==5918==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==5918== 
==5918== All heap blocks were freed -- no leaks are possible
==5918== 
==5918== For counts of detected and suppressed errors, rerun with: -v
==5918== Use --track-origins=yes to see where uninitialised values come from
==5918== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
Segmentation fault (core dumped)

從上面的輸出可以看到,valgrind檢測(cè)到了未初始化的變量,然后給出了警告。

2.2 內(nèi)存被釋放后進(jìn)行讀寫

1) 示例程序

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    char *p = malloc(1);
    *p = 'a';
 
    char c = *p;
 
    printf("\n [%c]\n",c);
 
    free(p);
    c = *p;
    return 0;
}

上面的代碼中,我們有一個(gè)釋放了內(nèi)存的指針p,然后我們又嘗試?yán)弥羔槴@取值。

2) 調(diào)試技巧

如下我們運(yùn)行memcheck來看一下Valgrind對(duì)這種情況是如何反應(yīng)的:

# gcc -g -c -o test.o test.c
# gcc -o test test.o
 
# valgrind --tool=memcheck ./test
==6067== Memcheck, a memory error detector
==6067== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==6067== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==6067== Command: ./test
==6067== 
 
 [a]
==6067== Invalid read of size 1
==6067==    at 0x400609: main (test.c:14)
==6067==  Address 0x51f6040 is 0 bytes inside a block of size 1 free'd
==6067==    at 0x4C28F7D: free (vg_replace_malloc.c:530)
==6067==    by 0x400604: main (test.c:13)
==6067==  Block was alloc'd at
==6067==    at 0x4C27E83: malloc (vg_replace_malloc.c:299)
==6067==    by 0x4005CE: main (test.c:6)
==6067== 
==6067== 
==6067== HEAP SUMMARY:
==6067==     in use at exit: 0 bytes in 0 blocks
==6067==   total heap usage: 1 allocs, 1 frees, 1 bytes allocated
==6067== 
==6067== All heap blocks were freed -- no leaks are possible
==6067== 
==6067== For counts of detected and suppressed errors, rerun with: -v
==6067== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

從上面的輸出內(nèi)容可以看到,valgrind檢測(cè)到了無效的讀取操作,然后輸出了警告 ‘Invalid read of size 1’。

2.3 從已分配內(nèi)存塊的尾部進(jìn)行讀/寫

1) 示例程序

#include <stdio.h>
#include <stdlib.h> 
 
int main(void)
{
    char *p = malloc(1);
    *p = 'a'; 
 
    char c = *(p 1); 
 
    printf("\n [%c]\n",c); 
 
    free(p);
    return 0;
}

在上面的代碼中,我們已經(jīng)為p分配了一個(gè)字節(jié)的內(nèi)存,但我們?cè)趯⒅底x取到c中的時(shí)候使用的地址是p 1。

2) 調(diào)試技巧

現(xiàn)在我們使用Valgrind運(yùn)行上面的代碼:

# gcc -g -c -o test.o test.c
# gcc -o test test.o
 
# valgrind --tool=memcheck ./test
==6302== Memcheck, a memory error detector
==6302== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==6302== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==6302== Command: ./test
==6302== 
==6302== Invalid read of size 1
==6302==    at 0x4005DE: main (test.c:9)
==6302==  Address 0x51f6041 is 0 bytes after a block of size 1 alloc'd
==6302==    at 0x4C27E83: malloc (vg_replace_malloc.c:299)
==6302==    by 0x4005CE: main (test.c:6)
==6302== 
 
 []
==6302== 
==6302== HEAP SUMMARY:
==6302==     in use at exit: 0 bytes in 0 blocks
==6302==   total heap usage: 1 allocs, 1 frees, 1 bytes allocated
==6302== 
==6302== All heap blocks were freed -- no leaks are possible
==6302== 
==6302== For counts of detected and suppressed errors, rerun with: -v
==6302== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

同樣,該工具在這種情況下也檢測(cè)到了無效的讀取操作。

2.4 內(nèi)存泄露

1) 示例程序

#include <stdio.h>
#include <stdlib.h> 
 
int main(void)
{
    char *p = malloc(1);
    *p = 'a'; 
 
    char c = *p; 
 
    printf("\n [%c]\n",c); 
 
    return 0;
}

在這次的代碼中,我們申請(qǐng)了一個(gè)字節(jié)但是沒有將它釋放。現(xiàn)在讓我們運(yùn)行valgrind看看會(huì)發(fā)生什么。

2) 調(diào)試技巧

# valgrind --tool=memcheck ./test
==6376== Memcheck, a memory error detector
==6376== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==6376== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==6376== Command: ./test
==6376== 
 
 [a]
==6376== 
==6376== HEAP SUMMARY:
==6376==     in use at exit: 1 bytes in 1 blocks
==6376==   total heap usage: 1 allocs, 0 frees, 1 bytes allocated
==6376== 
==6376== LEAK SUMMARY:
==6376==    definitely lost: 1 bytes in 1 blocks
==6376==    indirectly lost: 0 bytes in 0 blocks
==6376==      possibly lost: 0 bytes in 0 blocks
==6376==    still reachable: 0 bytes in 0 blocks
==6376==         suppressed: 0 bytes in 0 blocks
==6376== Rerun with --leak-check=full to see details of leaked memory
==6376== 
==6376== For counts of detected and suppressed errors, rerun with: -v
==6376== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

上面顯示檢測(cè)到了內(nèi)存泄露。這里如果我們加上一個(gè)--leak-check=full選項(xiàng)的話,則可以看到更為詳細(xì)的細(xì)節(jié)。

上面LEAK SUMMARY會(huì)打印5種不同的類型,這里我們簡(jiǎn)單介紹一下:

  • definitely lost: 明確丟失的內(nèi)存。程序中存在內(nèi)存泄露,應(yīng)盡快修復(fù)。當(dāng)程序結(jié)束時(shí)如果一塊動(dòng)態(tài)分配的內(nèi)存沒有被釋放并且通過程序內(nèi)的指針變量均無法訪問這塊內(nèi)存則會(huì)報(bào)這個(gè)錯(cuò)誤;

  • indirectly lost: 間接丟失。當(dāng)使用了含有指針成員的類或結(jié)構(gòu)體時(shí)可能會(huì)報(bào)這個(gè)錯(cuò)誤。這類錯(cuò)誤無需直接修復(fù),它們總是與definitely lost一起出現(xiàn),只要修復(fù)definitely lost即可。

  • possibly lost: 可能丟失。大多數(shù)情況下應(yīng)視為與definitely lost一樣需要盡快修復(fù),除非你的程序讓一個(gè)指針指向一塊動(dòng)態(tài)分配的內(nèi)存(但不是這塊內(nèi)存的起始地址),然后通過運(yùn)算得到這塊內(nèi)存的起始地址,再釋放它。當(dāng)程序結(jié)束時(shí)如果一塊動(dòng)態(tài)分配的內(nèi)存沒有被釋放并且通過程序內(nèi)的指針變量均無法訪問這塊內(nèi)存的起始地址,但可以訪問其中的某一部分?jǐn)?shù)據(jù),則會(huì)報(bào)這個(gè)錯(cuò)誤。

  • stil reachable: 可以訪問,未丟失但也未釋放。如果程序是正常結(jié)束的,那么它可能不會(huì)造成程序崩潰,但長時(shí)間運(yùn)行有可能耗盡系統(tǒng)資源。

2.5 不匹配的使用malloc/free、new/delete、new[]/delete[]

1) 示例代碼

#include <stdio.h>
#include <stdlib.h>
#include<iostream> 
 
int main(int argc, char *argv[])
{
    char *p = (char *)malloc(1);
    *p = 'a';
    
    char c = *p;
    
    printf("\n [%c]\n", c);
    
    delete p;
    
    return 0x0;
}

上面的代碼中,我們使用了malloc()來分配內(nèi)存,但是使用了delete操作符來刪除內(nèi)存。

2) 調(diào)試技巧

# gcc -g -c -o test.o test.cpp
# gcc -o test test.o -lstdc  
 
# valgrind --tool=memcheck ./test
==15237== Memcheck, a memory error detector
==15237== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==15237== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==15237== Command: ./test
==15237== 
 
 [a]
==15237== Mismatched free() / delete / delete []
==15237==    at 0x4C2942D: operator delete(void*) (vg_replace_malloc.c:576)
==15237==    by 0x4007EB: main (test.cpp:14)
==15237==  Address 0x5a15040 is 0 bytes inside a block of size 1 alloc'd
==15237==    at 0x4C27E83: malloc (vg_replace_malloc.c:299)
==15237==    by 0x4007B5: main (test.cpp:7)
==15237== 
==15237== 
==15237== HEAP SUMMARY:
==15237==     in use at exit: 0 bytes in 0 blocks
==15237==   total heap usage: 1 allocs, 1 frees, 1 bytes allocated
==15237== 
==15237== All heap blocks were freed -- no leaks are possible
==15237== 
==15237== For counts of detected and suppressed errors, rerun with: -v
==15237== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

從上面的輸出可以看到,valgrind清楚的說明了 ‘Mismatched free() / delete / delete[] ‘

2.6 多次釋放內(nèi)存

1) 代碼示例

#include <stdio.h>
#include <stdlib.h> 
 
int main(int argc, char *argv[])
{
    char *p = (char *)malloc(1);
    *p = 'a'; 
 
    char c = *p;
    printf("\n [%c]\n",c);
    free(p);
    free(p);
    return 0;
}

2) 調(diào)試技巧

在上面的代碼中,我們兩次釋放了p指向的內(nèi)存,現(xiàn)在讓我們運(yùn)行memcheck:

# gcc -g -c -o test.o test.c
# gcc -o test test.o
 
# valgrind --tool=memcheck ./test
==15354== Memcheck, a memory error detector
==15354== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==15354== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==15354== Command: ./test
==15354== 
 
 [a]
==15354== Invalid free() / delete / delete[] / realloc()
==15354==    at 0x4C28F7D: free (vg_replace_malloc.c:530)
==15354==    by 0x400617: main (test.c:12)
==15354==  Address 0x51f6040 is 0 bytes inside a block of size 1 free'd
==15354==    at 0x4C28F7D: free (vg_replace_malloc.c:530)
==15354==    by 0x40060B: main (test.c:11)
==15354==  Block was alloc'd at
==15354==    at 0x4C27E83: malloc (vg_replace_malloc.c:299)
==15354==    by 0x4005D5: main (test.c:6)
==15354== 
==15354== 
==15354== HEAP SUMMARY:
==15354==     in use at exit: 0 bytes in 0 blocks
==15354==   total heap usage: 1 allocs, 2 frees, 1 bytes allocated
==15354== 
==15354== All heap blocks were freed -- no leaks are possible
==15354== 
==15354== For counts of detected and suppressed errors, rerun with: -v
==15354== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

從上面的輸出可以看到,該功能檢測(cè)到我們對(duì)同一個(gè)指針調(diào)用了兩次釋放內(nèi)存操作。

2.7 memcheck綜合示例

1) 示例程序

#include <stdio.h>
#include <stdlib.h> 
 
class c1
{
private:
    char *m_pcData;
 
 
public:
    c1();
    ~c1();
};
 
 
c1::c1()
{
    m_pcData=(char*)malloc(10);
}
 
 
c1::~c1()
{
    if(m_pcData) delete m_pcData;
}
 
char *Fun1()//definitely lost
{
    char *pcTemp;
 
 
    pcTemp=(char*)malloc(10);
    return pcTemp;
}
 
 
char *Fun2()//still reachable
{
    static char *s_pcTemp=NULL;
 
 
    if(s_pcTemp==NULL) s_pcTemp=(char*)malloc(10);
 
 
    return NULL;
}
 
 
char *Fun3()//possibly lost
{
    static char *s_pcTemp;
    char *pcData;
 
 
    pcData=(char*)malloc(10);
    s_pcTemp=pcData 1;
 
 
    return NULL;
}
 
 
int Fun4()//definitely and indirectly lost
{
    c1 *pobjTest;
 
 
    pobjTest=new c1();
 
 
    return 0;
}
 
 
char *Fun5()//possibly lost but no need of repair,repair the breakdown then no memory leak
{
    char *pcData;
    int i,*piTemp=NULL;
 
 
    pcData=(char*)malloc(10);
    pcData =10;
    for(i=0;i<10;i  )
    {
        pcData--;
        *pcData=0;
    
        if(i==5) *piTemp=1;//create a breakdown
    }
    free(pcData);
 
 
    return NULL;
}
 
 
int main(int argc, char *argv[])
{
    printf("This program will create various memory leak,use valgrind to observe it.\n");
    printf("Following functions are bad codes,don\'t imitate.\n");
    printf("Fun1\n");
    Fun1();
    printf("Fun2\n");
    Fun2();
    printf("Fun3\n");
    Fun3();
    printf("Fun4\n");
    Fun4();
    printf("Fun5\n");
    Fun5();
    printf("end\n");
 
 
    return 0;
}

2) 調(diào)試技巧

# gcc -g -c -o test.o test.cpp
# gcc -o test test.o -lstdc  
# valgrind --tool=memcheck ./test
==15596== Memcheck, a memory error detector
==15596== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==15596== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==15596== Command: ./test
==15596== 
This program will create various memory leak,use valgrind to observe it.
Following functions are bad codes,don't imitate.
Fun1
Fun2
Fun3
Fun4
Fun5
==15596== Invalid write of size 4
==15596==    at 0x400859: Fun5() (test.cpp:88)
==15596==    by 0x4008E9: main (test.cpp:110)
==15596==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==15596== 
==15596== 
==15596== Process terminating with default action of signal 11 (SIGSEGV)
==15596==  Access not within mapped region at address 0x0
==15596==    at 0x400859: Fun5() (test.cpp:88)
==15596==    by 0x4008E9: main (test.cpp:110)
==15596==  If you believe this happened as a result of a stack
==15596==  overflow in your program's main thread (unlikely but
==15596==  possible), you can try to increase the size of the
==15596==  main thread stack using the --main-stacksize= flag.
==15596==  The main thread stack size used in this run was 8388608.
==15596== 
==15596== HEAP SUMMARY:
==15596==     in use at exit: 58 bytes in 6 blocks
==15596==   total heap usage: 6 allocs, 0 frees, 58 bytes allocated
==15596== 
==15596== LEAK SUMMARY:
==15596==    definitely lost: 18 bytes in 2 blocks
==15596==    indirectly lost: 10 bytes in 1 blocks
==15596==      possibly lost: 20 bytes in 2 blocks
==15596==    still reachable: 10 bytes in 1 blocks
==15596==         suppressed: 0 bytes in 0 blocks
==15596== Rerun with --leak-check=full to see details of leaked memory
==15596== 
==15596== For counts of detected and suppressed errors, rerun with: -v
==15596== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Segmentation fault (core dumped)

[參看]

  1. Valgrind使用

  1. valgrind官網(wǎng)

  1. Valgrind使用說明

  1. Linux:Valgrind使用

  1. 如何使用Valgrind memcheck工具進(jìn)行C/C 的內(nèi)存泄漏檢測(cè)

  1. GDB與Valgrind ,調(diào)試代碼內(nèi)存的工具

參考網(wǎng)站:

http://www.linuxidc.com/Linux/2012-06/63754.htm

http://elinux.org/Valgrind (wiki)

http://blog.csdn.net/sduliulun/article/details/7732906

http://blog.csdn.net/gatieme/article/details/51959654(比較全面的介紹)

http://www.linuxidc.com/Linux/2012-06/63754.htm (非常詳細(xì)的介紹了每個(gè)工具的使用)

專注于無線通信的蓬勃 朝氣蓬勃——不積跬步 無以至千里, 不積小流 無以成江海
評(píng)論
  • 在EMC測(cè)試過程中,傳導(dǎo)發(fā)射(Conducted Emission,CE)超標(biāo)是工程師最常遇到的問題之一。更令人頭疼的是,同樣的超標(biāo)曲線背后,可能對(duì)應(yīng)著完全不同的干擾機(jī)理:有的是差模噪聲沿電源回路傳播,有的是共模電流通過寄生路徑耦合,還有些問題甚至并非來自電源本身,而是負(fù)載、電纜布局或接地結(jié)構(gòu)引起的連鎖反應(yīng)。 · 150kHz~1MHz 超標(biāo):多為差模噪聲為主,干擾沿火線-零線回路傳輸。 · 1MHz~30MHz 超標(biāo):通常共模噪聲占主導(dǎo),干擾通過火線/零線對(duì)地回路傳播。 如果條件允許,用電流探
    譽(yù)磁電磁兼容EMC 2026-07-31 18:45 518瀏覽
  • ?摘要:低價(jià)大流量卡正全面退市,政策收緊已成定局。面對(duì)傳統(tǒng)號(hào)卡的不確定性,隨身WiFi憑借穩(wěn)定連接、多設(shè)備共享、獨(dú)立設(shè)備和靈活套餐等優(yōu)勢(shì),成為務(wù)實(shí)可靠的備選方案。1、流量卡黃金時(shí)代要結(jié)束了通信行業(yè)正迎來一場(chǎng)前所未有的“地震式”調(diào)整——曾讓無數(shù)用戶追捧的低價(jià)大流量卡,正在全速退出各大平臺(tái)。這早已不是一次普通的競(jìng)合,而是一場(chǎng)趨勢(shì)性的行業(yè)洗牌。回望過去,19元200G的神卡,那時(shí)真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及。可如今,回頭再看,那種
    愛上電路設(shè)計(jì) 2026-08-03 10:21 128916瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩(wěn)定起振的成品,要經(jīng)過十幾道精密工序。它內(nèi)部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個(gè)生產(chǎn)過程里哪怕0.1微米的誤差,都會(huì)直接廢掉整批產(chǎn)品,這也是小尺寸晶振過去長期依賴進(jìn)口,國內(nèi)廠商花了十幾年才啃下量產(chǎn)硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 412瀏覽
  • 文:杜杰編輯:侯煜當(dāng)?shù)貢r(shí)間7月28日,美國特朗普政府落地最新科技封鎖政策,美國聯(lián)邦通信委員會(huì)(FCC)正式更新《受管制清單》,新增兩大類設(shè)備——境外生產(chǎn)的先進(jìn)機(jī)器人設(shè)備、境外生產(chǎn)的聯(lián)網(wǎng)電力逆變器。FCC在官方情況說明書中明確,該類境外制造產(chǎn)品,“會(huì)對(duì)美國國家安全或美國民眾的人身安全構(gòu)成無法承受的風(fēng)險(xiǎn)”。本次新規(guī)設(shè)置明確豁免機(jī)制:經(jīng)美國國防部(DoW)、電力逆變器品類經(jīng)美國國土安全部(DHS)審核并授予“有條件批準(zhǔn)”,認(rèn)定對(duì)應(yīng)設(shè)備品類不存在重大安全風(fēng)險(xiǎn),即可獲得準(zhǔn)入豁免。同時(shí)政策嚴(yán)格執(zhí)行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 345瀏覽
  • 在前六期中,我們已經(jīng)分別討論了 CRA 的適用范圍、整體影響、漏洞通報(bào)義務(wù)、風(fēng)險(xiǎn)評(píng)估與技術(shù)文檔證據(jù)鏈、第三方組件與 SBOM 供應(yīng)鏈治理,以及產(chǎn)品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業(yè)已經(jīng)能夠回答幾個(gè)核心問題:產(chǎn)品是否落入 CRA 適用范圍,產(chǎn)品由哪些組件構(gòu)成,企業(yè)如何證明自己在設(shè)計(jì)、開發(fā)和上市前采取了必要的安全措施,以及產(chǎn)品上市后如何持續(xù)維護(hù)和安全下線。但對(duì)于真正準(zhǔn)備落地 CRA 合規(guī)的企業(yè)來說,還有一個(gè)更現(xiàn)實(shí)的問題:CRA 的法規(guī)條文相對(duì)原則化,企業(yè)應(yīng)當(dāng)如何把“網(wǎng)絡(luò)安
    虹科云科技 2026-08-03 16:51 200015瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 151005瀏覽
  • 摘要在防爆電氣設(shè)計(jì)中,只參照芯數(shù)選型而忽略額定載流量,長期滿負(fù)荷運(yùn)行會(huì)出現(xiàn)插頭發(fā)熱、接觸面氧化、IP67 密封受熱老化等問題。結(jié)合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級(jí)電流參數(shù)對(duì)照表,區(qū)分冷壓免焊接、焊接兩種接線結(jié)構(gòu)的安全載流數(shù)值,設(shè)置合理電流冗余系數(shù),搭配使用環(huán)境修正參數(shù),規(guī)范防爆接近開關(guān)連接器、防爆法蘭插座的選型計(jì)算方式。關(guān)鍵詞圓形防爆連接器,載流參數(shù)表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產(chǎn)品概述圓形防爆連接器觸點(diǎn)載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128670瀏覽
  • 在物聯(lián)網(wǎng)從“萬物互聯(lián)”邁向“萬物智聯(lián)”的進(jìn)程中,LTE Cat.1憑借其在速率、成本與網(wǎng)絡(luò)覆蓋之間的完美平衡,正成為中低速物聯(lián)網(wǎng)市場(chǎng)的絕對(duì)主力。隨著2G/3G網(wǎng)絡(luò)的逐步退網(wǎng)以及新國標(biāo)對(duì)終端設(shè)備智能化、定位功能的強(qiáng)制要求,Cat.1模組迎來了爆發(fā)式的增長窗口。在這一關(guān)鍵節(jié)點(diǎn),基于華為海思Hi2131芯片設(shè)計(jì)的LTE Cat.1模組,憑借其在能效、射頻、架構(gòu)及物理規(guī)格上的底層創(chuàng)新,成功打破了“高性能必高功耗”的傳統(tǒng)魔咒,為行業(yè)提供了極具競(jìng)爭(zhēng)力的連接最優(yōu)解。核心技術(shù)優(yōu)勢(shì):重塑Cat.1能效與連接標(biāo)桿海
    用戶1778981989717 2026-08-05 21:04 177瀏覽
  • 做藍(lán)牙音箱的工程師大概都碰過這個(gè)局面。產(chǎn)品要連手機(jī)放歌,要本地播開機(jī)提示音和按鍵音,還要接 App 做配網(wǎng)和狀態(tài)上報(bào)。三件事拆開,早先的常規(guī)做法是音頻藍(lán)牙一顆料、數(shù)傳藍(lán)牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機(jī)電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍(lán)牙、BLE 數(shù)傳和 MP3 本地播放三樣全包了。對(duì)藍(lán)牙音箱來說,最實(shí)在的好處就
    唯創(chuàng)知音語音芯片 2026-08-06 15:14 306瀏覽
  • 產(chǎn)品使用18V供電,配套4串鋰離子電池,需要設(shè)計(jì)一個(gè)充電器。因?yàn)檩斎?8V,電池最高 16.8V,壓差僅 1.2V。因?yàn)閴翰钐 J褂瞄_關(guān)型的充電控制芯片不穩(wěn)定。嘗試自行設(shè)計(jì)一個(gè)。整體采用分立三極管 + TL431架構(gòu),分4個(gè)功能單元:使能控制回路、限流環(huán)路、TL431 精密恒壓反饋環(huán)路、PNP 功率管主功率輸出回路;實(shí)現(xiàn)完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經(jīng) R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導(dǎo)通,對(duì)地拉低 R1、R2 組成的分壓控制節(jié)點(diǎn)電位;該節(jié)點(diǎn)直
    southcreek 2026-08-07 13:45 361瀏覽
  • 導(dǎo)語在現(xiàn)代高速數(shù)字電路設(shè)計(jì)中,信號(hào)的完整性已不僅是理想波形推演,而是一場(chǎng)與物理非理想特性正面博弈的工程實(shí)踐。濾波器芯片作為凈化傳輸鏈路的關(guān)鍵屏障,其核心挑戰(zhàn)在于:能否有效識(shí)別并濾除那些隱匿在電平跳變過程中的亞納秒級(jí)瞬態(tài)脈沖干擾,這類干擾持續(xù)極短,卻足以在高速鏈路中引發(fā)誤觸發(fā)。然而,傳統(tǒng)函數(shù)發(fā)生器受限于采樣率與邊沿速率,根本無法忠實(shí)復(fù)現(xiàn)如此狹窄且陡峭的異常波形。針對(duì)此困境,德思特TS-AWG7000系列任意波形發(fā)生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態(tài)脈沖提供精細(xì)刻畫,配合SPG
    德思特測(cè)試測(cè)量 2026-08-05 14:06 5瀏覽
我要評(píng)論
0
點(diǎn)擊右上角,分享到朋友圈 我知道啦
請(qǐng)使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 美国片睫毛膏| 奶瘾犯了文(文轩)11.0| 性生活伦理电影| 空姐日记第6集| 美式1984美式保罗1| 小唐璜情史中文版| 指环王在线观看| 奇袭机场电影免费观看| 妈妈我想你高清日本免费视频| 未来之翼| 家事如天电视剧| 八戒八戒8免费| 高清《继母2》| 《卖保险的女销售》3| 打鬼子去| 女版《壮志凌云》免费 | 女子护卫队| 蒂凡尼的早餐迅雷下载| 欢乐颂1电视剧全集免费观看| 职场晋升的妻子职场2剧情| 外星奇缘| 神医小娇妻短剧全集| 《法国空乘6》| 哈利波特与魔法石百度影音| 战狼女版6在线观看| 那场雨爱上你泰剧在线观看| rosimm电视剧免费观看高清| 扫毒风暴高清完整版免费观看电影| 动漫《侄女的开发日记》免费观看中| 《哺乳》电影完整版观看免费视频| 蜜桃成熟时3之蜜桃仙子| 特殊游泳课在线观看| 移动迷宫西瓜影音| 高清《雏菊》| 纵横四海电视剧| 儿女传奇之闹婚记| 《水电工的艳遇》韩国| 玫瑰故事电视剧免费视频| 上司侵犯人妻中文字幕熟女| 《女巫》满天星播放| 猫眼三姐妹中文版全集| 金玉满堂电视剧| a篇免费视频| 云中玫瑰| 追鱼传奇全集| 东京塔越南女子别动队在线观看完整视频 | 黄梅戏全场| 告诉我你想要什么 电影免费观看| 丈夫上司装饰品的妻子演员表| 正杨管业| 完美诊所| 荣誉代号法版免费观看| 蒙面超人rx粤语| 影片《夫妻的快乐旅游》在线观看 | 斯嘉丽约翰逊梯震| 鉴宝女王:古玩市场我称霸全集免费 | 武林风泰山| 杰西卡·琼斯| 大江大河第三部53| 旧版《恶魔人:启示录》| 痕迹电视剧| 克莱尔《X迷宫》全集免费看| 速度与激情10 电影| 神秘世界历险记| 日剧卖房子的女销售| 小蜜桃免费看| 美国忌讳1–7| 钢铁侠1国语版高清| 军人使命| 本乡爱合集| 意大利欲望| 夕阳红简谱| 壮志凌云(大人版)1-3| 春风燃情| 韩国热播剧| 农民伯伯下乡第五部| 伊战启示录| 哎呀这个天后有点凶短剧免费观看| 维修工的艳遇电影完整| 勇者传说粤语| 公的浮之手电影完整版在线| 《他是谁》电视剧| loveme枫和铃声樱花| xl司令动漫第一季全集在线观看免费播放 | 曼娜第二部免费观看完整版| 《驯服小峓子2》| 寂静法师| 地下城与西游记18| 正阳门下在线观看| 人工降雨引发暴雨| 《特殊游泳教练》免费| 阳光正好电视剧免费观看全集| 女子输血感染艾滋10年后才发现| 落魄贵族琉璃川免费观看| 平凡歌电视剧免费观看全集高清| 迷人的保险销售员| 需要爸爸播种子HD中字_午夜电影全集_完整版免费在线观看-天天影院 | 查泰莱夫人的情人1981| 《昭和系列》电影全部导演 | 《特殊游泳教练》免费观看| 地缚少年花子君第二季在线观看| 价值16万手镯被扔进垃圾桶| 女超人麦乐迪未删减版| 花样男子国语版下载| 天下第一大结局| 电影乃雀主演| 远东第一监狱| 陪你到世界终结| 《社长夫人的美貌》在线观看| 天骄 电视剧| 背叛在线观看免费完整版电视剧| 电影《需要爸爸播种子 2 | 学校风云免费| 站着再来一次30集全免费高清| 疯狂直升机| 合租男女1v1h| 水电工的艳遇| 聊斋之花弄月| 目光所及免费观看电视剧| 《贝拉8》完整版| 生存游戏在线观看完整版免费| 天空电影在线观看免费完整版| 保险公司推销员8中字手机| 熊出没高清观看| 我们的歌第三季综艺| 漂亮的妈妈7开头字| 秦腔三娘教子| 亲爱的热爱的电视剧观看| 电影《V酒店》第一季在线观看| 梅根2.0电影| 野玫瑰之恋| 插曲的痛10集全集免费播放电影 | 庄先森解说| 劳拉的痴迷(1996)星克莱尔| 残梦电影完整版| 极乐麻将| 人猿泰山《激战丛林》完整版意大利| 禁忌的女人电影| 唐探1900免费观看电影完整版| 特殊游泳老师| 万物生在线完整版免费观看| 电视剧风影全集观看| 饥饿的阿姆6高清版下载 | 大明风华免费星辰影院| 满天星麦乐迪| 小伙子爱上隔壁女邻居电视剧| 玉蒲团2完整版高清| 炸天小姐| 欲望爱人免费观看| 北京奥运会开幕式2008完整版| 落魄贵族琉璃川免费观看全集动漫版| 青梅竹马是消防员风车| 一念永恒第一季在线观看| 搜救官| 外交部回应傅聪涉乌问题表态 | 《睫毛膏》4| 朋友的母亲4| 电视剧风影全集观看| 《品味人生无憾》坎贝奇英文| 公主把腿分大点毛笔| 19岁在线观看| 销售的秘密韩国电影在线观看完整版 | 转世传说| 贵州省| 女性瘾者春梦引爆内地影坛| 睫毛膏4美版免费观看| 阿童木国语| 特别酒店3跳舞| 披荆斩棘2| 返老还童的电影| 美女在线观看完整版全集| 陷入我们的热恋电视剧免费观看| 动漫在线免费看| 丰满的继牳3小早川怜子-高清完整无删 | 九号秘事第七季| 丹麦《红粉监狱》剧情介绍| 电视剧最美是你| 《家庭矛盾》melody| 西部世界在线观看| 舞乐传奇全集| 闻喜县| 波斯王子| 密爱:我朋友的妈妈2 电影| 罗志祥演唱会| 需要爸爸种子在线追剧| 刘敏涛主演的黑蝴蝶在线播放 | 交谊舞曲快四| 倚天屠龙记2| 郝板栗千金小姐在线观看| 《僵尸》| 犬夜叉第二季| 厨房激战在线观看| 人与动物免费观看电视剧完整版| 王力宏有什么歌好听| 《法国空乘2| 黑天鹅在线观看| 《北越暴行》免费观看高清| 天剑绝刀之独孤九剑电影完整版| 人妻初次按摩2| 父亲微电影| 特殊游泳教练在线| 授她以柄电视剧免费播放| 满天星《乌托邦》欧美| 一生一世电视剧完整版| 宫锁沉香电视剧| 幸福触手可及电视剧全集免费观看| 青青河边草HD免费观看电视剧 | 高清《迪拜的女孩》在线观看| 汉城世界杯主题曲| 新人类2毒医肥尸国语| 变形金刚4枪版| 许家印最新世界排名| 电影 《透视》在线观看| 法警小队 第一季未删减| 亲爱的设计师电视剧免费观看| 法国监狱电影完整版| 商务囧途| 《斗罗大陆》免费观看在线观看高清| 韩国电影维修工艳遇| 三打白骨精电影| 猎狼刀电视剧01集播放| 本乡爱电影高清免费观看| 剧组的故事| 小巷人家40集全免费观看| 电影《牙医姐妹》正片| 一脸嫌弃| 土豆粉培训| 毛骨悚然撞鬼经2014| 巜人妻初次按摩| 2对1:三人一次性体检韩国伦理 | 日本JIZZ| 两个人免费完整在线观看hd| 沉香如屑免费观看完整版电视剧| 星舰迷航| 花蝴蝶4大全免费多少集| 陀地驱魔人结局| 古惑仔5龙争虎斗国语字幕| 岳理厨房伦片在线播放| 解禁男女在线观看| 二龙湖爱情故事2020| xL司令第一季马赛免费观看高清| 欢乐喜剧人第一季完整版免费观看| 夏至未至豆瓣| 泾源县| 少妇的味道4| 《淮水竹亭》免费观看| 金牌得主 第二季电视剧| 千金与佣人电影观看里的揉大白兔| 电视剧婆婆来了大结局| 绅士和小姐电视剧免费观看韩剧网| 360大佬爱上我第二季全集观看| 神墓动漫全集在线播放| 小娘惹电视剧免费全集看剧情| 《西服女律师替丈夫还钱》| 刘秀电视剧全50集| 再见美丽小姐国语版| 上帝也疯狂1电影免费观看完整版| 电影播放《渔夫荒淫史》| 绝世武功 微电影| 《上位2》电影在线观看| 私人助理2完整版免费版电影| 迷恋电影| 星辰变第四季动漫在线观看| 甜蜜惩罚在线| 神鬼战士1满星版| 逆天修仙飒爆:废柴嫡女短剧全集| 两个女人互添下身高潮自视频| 修脚培训| 《睫毛膏》2| 咱们结婚吧 电影| 爆笑西游记全集| 大牛影库战狼6观看免费| 女生腹泻未在意5天后心脏停跳| 侠岚第3季全集| 战狼6免费完整电影在线观看高清视频软件下载 | 星迷宫| 年轻母亲1在线观看完| 小欢喜全集免费观看完整版| 哇嘎电影免费观看国语高清 | 免费9.1直接看| 魔乳秘剑帖 无修版| 外来从业人员综合保险查询| 农场交易满天星| 狂飙2022电视剧全集免费播放| 《僵尸叔叔》国语版免费观看| 刻晴大战史莱姆观看高清动漫 | 领导挺进娇妻身体| 《法国航空4》| 海天雄鹰免费观看| 两架钢琴未删减| 电影美容室的特殊待遇7 | 小凤新婚台湾版在线资源| 《独一无二》| 电视剧天眼| 黑白配HD版大全免费观看| 土匪传奇 电视剧| 告密者在线观看| 兄弟的老婆8免费观看电视剧下载hezewan| 纽约客的故事| 斗罗大陆209| 我的刑警朋友| 蛇姬恋| 新春调频| 驯龙高手1普通话版免费| 《美容院:特殊待遇》免费观看| 卢靖姗太强了| 国民奇探| 《慢性呕吐实验室》电影免费观看| 圣德罗佩斯的姑娘们在线播放| 曲阳县| 高清《完美邻居》电影在线观看| 千山暮雪百度影音| 卧底归来免费全集在线观看| 女大学生按摩3| 电视剧人间烟火免费观看全集高清| 我独自升级动漫第二季| 阿朱外卖三部曲| 杀手无假期| 触摸未来2| 金琴英3比1张本美和亚锦赛夺冠| 香蕉TV免费| 掌家权在手:后宅主母全集免费 | 三年大片在线观看免费观看第一集全 | 周生如故在线播放免费观看| 中国家庭第二部全集| 逃犯入室暴行电影免费播放| 小马驹动画片| 家国两难全| 邻居的老婆完整版电视剧免费观看| 特蕾西1987满天星| 出关电视剧全集在线| 各自远飏| 妈妈14中字头强华驿大结局视频 | 剃刀边缘电视剧全集| 《克里斯蒂娜》电影在线观看| 《八尺夫人意大利满天星在线观看 | 偶遇韩国电影免费观看韩国版| 电影《寡妇村》海外版| 一天内全球多地发生客机事故 | 电视剧新生2024| 韩国三级《交换温柔》| 当蜜桃成熟全集高清| 最高爱人诏三上剧情介绍| 新上海滩 张国荣| 女生北漂5年半攒钱超100万| 暴躁老妈1-46集全免费观看高清版百度| 豫剧名家名段唱段| 岳飞传刘兰芳| 小马宝莉动画片全集免费中文版| 情事电影韩国伦理片在线播放| 《保姆特别待遇》| 被义子侵犯不敢出声电影| 动物世界斑马交配| 饺子电影| 维修工的艳遇电影完整| 金瓶梅 高清完整版 bt| 信条完整版在线观看| 特殊的职业2李采潭主演是谁| 隐藏的面孔| 有翡在哪个卫视播出| 站着再来一次26集全集免费播放| 热血街区极恶王x| 30而已| 我的妹妹不可能那么可爱第一季| 美国粉红大白菜在线播放| 第一夫人在线观看| 《亲爱的小孩》免费播放| 特邀外卖员在线观看| 超人气校园| 免费观看90分钟高清电视| 哪个APP可以看奥运会回放| 《需要爸爸播种籽2》| 温柔的背后全集在线观看| 梦回鹿鼎记完整版| 美女之家| 水润女人全免费高清电视剧在线观看完整版 | 战狼6欧式少女全部视频努努| 杉野希妃三级| 新疆教育厅原厅长带头编问题教材| 玉莆田满清十大| 伊波拉病毒无删减免费观看完整国语版| oh 透明人间| 日本妈妈免费光棍| 房奴试爱开头原声| 傻儿司令| 盗墓笔记电视剧资源| 扑克 电影| 《法国空姐6》大结局| 碟仙诡谭| 哈尔的移动城堡日语| 少女潘金莲下载地址| 男女一起愁愁愁电视剧免费j苦闷苦闷看 j | 名侦探柯南579| 大秦帝国第二部在线观看| 谍战剧《梅花红桃》开机| 伊波拉病毒无删减免费观看完整国语版| 西夏狼王| 美丽在望粤语| 《漂亮的女邻居》三级| 美国荷尔蒙在线观看| 电视剧聊斋志异| 韩剧《美人》完整版| 最美丽的第七天| 蛇姬恋泰国电影完整版| 沧元图58集| 祷告良辰歌| 拔哥的故事电影| 真人版超级玛丽| 泰国暴躁少女航母电影| 《蹂躏》| 古墓丽影(法国版)在线观看| 一人之下第五季免费观看完整版| 高清《监狱女囚》13集观看| 酒店第1-100集免费观看下载 | 公的浮之手电影完整版在线| 《电影灭火女警2》| 高中英雄们| 吕总张津瑜卫生间| 《入室暴行3被蹂躏电影理论| 平凡的世界 电视剧| 红蔷薇剧情介绍| 前世情缘| 《美姊妹牙医》| 诺曼影视| 国家命脉| 河流如血| 日本维修工的艳遇3| 沙坑里的女孩在线观看完整版| 星空在线观看免费高清| 迷人的保姆 电影免费| 插曲的痛30集全集免费播放电影无码 | 5哈第一季| 电影不能错过的只有你免费观看| 高压监狱法国伦理| 我主沉浮在线观看| 盛李豪全红婵合体打羽毛球| 漂亮妈妈6巴字中字开头7个字| 侯友宜再喊话柯文哲:一同放下自己| 缉恶2024| 电影《需要爸爸播种》演员里的 | 关中往事| 重症外伤中心韩剧全集免费播放| 酒店1—45集全| 一个小山村的故事| 暖暖请多指教电视剧| 吴克群 胡闹| 木下檀檀子视频高清播放| 血战钢锯岭在线观看| 电影《金钱和我》国语版| 高清绮梦之旅未删减| 杰西卡德里克满天星| 鬼吹灯之龙岭迷窟| 夏目彩春57部在线电影| 江门厂房出租| 我需要爸爸的种子在线观看| 晓庄秘史| 隆安县公安局长陆世长| 电视剧.三大队| 商务旅行中戴绿色帽子的女老板同行台词 | 白仙儿动画搞笑| 《爱我有几何》免费观看 | 诱人的岳喷奶水HD中文字幕| 妻子的秘密免费版电视剧大全| 北原多香子无打码在线观看| 芭莎明星慈善夜| 特殊游泳课艺术片| 中间人泰剧双男主| 天下无双张靓颖| 我们恋爱吧第6季| 爸爸需要播种子在线免费观看| 与凤行电视剧在线观看| 生化危机4高清在线观看| りりriri| 关于新有菜上司和下属的电影有| 我是大明星奇迹少年| 新白发魔女传全集| 欢迎来到实力主义至上教室| 激战后厨5-1| 动画片喜羊羊与灰太狼免费观看| 茶杯犬要多少钱| 触手大战| 销售的秘密2在线观看免费版电视剧 | 星克莱尔的《第一夫人》在线观看 | 移山倒海樊梨花全集| 亲吻姐姐2| 男女一起愁愁愁电视剧免费观看全集高清完整 | 生化危机终章在线观看| 黑白配国语在线播放观看| 《万能遥控器2》女主角是谁| 使徒行者31集| 金丝雀失忆后| 同学的母亲中字id英文| 电影潘多拉之镜| 爵迹3风津道| 小小的我演员表| 董倩采访全红婵| 韩国维修工大尺度电影免费观看| 电影 戏梦巴黎| 江湖兄弟电视剧| 任鲁豫忆河大礼堂| https://www.yalan365.com/shiwutv/sreteuc.html | 小娘惹在线观看| 白峰美羽伦理片| 四川妹子| 教堂姐姐在线观看| 西虹市首富 电影| 黑白配高清完整版| 21世纪性格爱情指南加拿大| 传奇英雄电视剧| 都市后宫艳妇全部阅读| 喜爱夜蒲 歌曲| 多田有花义母的写作背景和背景介绍 | 剃须然后捡到女高中生 | 美国爸爸需要播种电影在线观看 | 石敢当之雄峙天东电视剧| 横峰县| 和女部长一起出差在线播放中文| 新梅瓶1一5集在线观看| 学姐知道 电视剧| 《极乐宝鉴2》电影观看在线| 熟妇和巨乳继拇做爰电影院| 血色玫瑰电视剧全集免费播放| 荒原城堡| 高清29岁单身冒险家的日常| 日本电影《律师坠落》演员表| 仁心俱乐部24集连续剧免费观看| 捡到女高中生然后剃须动漫结局 | 《私人航空》免费观看在线观看| 高清御赐小仵作2未删减| 变形金刚3国语版| 牙克石市| 丰满的继牳5伦A片免费播放| 中国家庭第一部电视剧免费观看| 恋爱先生免费观看全集| 奥特曼兄弟国语全集| 黑白配高清完整版在线观看大潘小品好感/ | 半路夫妻剧情| 张警官第一集在线观看 | 日本维修工的艳遇3| 陈梦说就是要赢给所有人看| 姊妹牙医| 滚滚红尘免费| 斗罗大陆114| 《代替满足妻子》电影| 一念永恒第三季在线免费观看| 步步深陷短剧全集免费观看| 新三狼之欢场屠夫| 1995版《泰山和珍妮》在线观看 | 《超时空辉夜姬!》| 间谍过家家樱花动漫| 她很漂亮电视剧韩国| 出轨同学会1| 县委大院电视剧免费观看完整版| 电视剧你比星光美丽免费观看| 好儿子快插妈妈下面好爽视频| 金银梅5一10普通话23| 爱的涟漪国语版全集| 新娘十八岁韩剧| 狂飙支队电视剧全集免费播放| 《卖楼销售员》完整版| 半夏电视剧免费观看完整版高清| 忘川彼岸| 突围行动国语| 1995意大利版泰山全版| 我的公主小妹| 模范出租车韩剧| 《女超人2满天星版》完整版| 剧场版名侦探柯南| 五号特工组1全集| 盛夏晚晴天迅雷下载| 房奴试爱电视剧开头原声| 甜性涩爱优酷网| 硬汉枪神在线观看| 英语老师不戴罩子让我捏一节课的| 灵川县| 凯登克罗斯最经典10部电影| 桃花运 电影| 遇见心软的神短剧免费观看高清| 单身首尔电影| 21世纪爱情指南完整在线观看| 一网打尽 印度电影| 南非掠夺者| 《伊波拉病毒》2| 艳星evelynlin大战黑人| 黑帮总裁| 哪吒2在线观看免费版高清动画 | 拜登为英特尔站台又提中国| 特战荣耀电视剧全集免费观看策驰| 秘密访客| 双人调情按摩术在线观看| 免费在线电影抵债的妻子| 掌中雀电视剧在线观看全集免费| 长相思杨紫免费观看电视剧全集| 我的女儿是花| 法国空姐3高清完整满天星奔跑吧ep| 女女免费观看高清完整版电视剧| 诺丁山的梦| 郝板栗《千金小姐》免费观看在线观 | 哇嘎电影免费观看国语高清| 杨思敏金梅瓶1一5集演员表| 女人是男人的未来免费观看| 帝王计划怪兽遗产电视剧免费观看| 独孤天下| XXXX69美国| 霹雳娇娃百度影音| 欧美zzzxxx| 免费看安志杰盲战| 妻子的谎言54集全免费剧情介绍| 美发店的待遇2| 雪中悍刀行泄露版在线观看| 裙子下面是野兽动漫| 山医命相卜| 真心电影网| 欧美伦理-西部通缉令精修成人版字幕佳作| 小杜与我| 熊孩子惨案| 第七座墓志铭电视剧| 《谋杀的滋味》| 《和讨厌的部长出差》大结局免费看| 星汉灿烂西瓜免费观看| 安哲罗普洛斯| 如懿传在线观看全集| 异形夺命| 韩国三级维修师傅的艳遇 | 被义子侵犯不敢出声电影| 十七大内容| 韩剧《母亲》免费观看| 19岁大学生免费观看电视剧百度| 陈真电视剧| 巴啦啦小魔仙之彩虹心石11| 王祖贤潘金莲之前世今生| 开物成务的正确解释| 学生的妈妈ID| 疯狂的石头电影| 和讨厌的部长一起去出差旅》》 - 详情介绍手机免费播放... 日本其它2004很 | 三年大片大全免费观看国语版2 | 四川绵阳村民种中药材致富| 兵在哪马在哪俑在哪导游你在哪| 木子檀电影免费观看2023年上映| 我的团长我的团下载| 欺诈猎人| 兔子先生视频第一季免费观看全集高清 | 流浪地球2完整版在线看观看免费| 黄金瞳免费观看完整版| 金银悔5普通话版免费播放| 战狼6免费观看完整版国语在线下载电影| 四大名捕大结局西瓜| 隐藏大佬:外卖小哥全集免费| 欢乐颂第三季| 笑功震武林| 年轻的空姐4| 等着你韩国电影在线观看| 吴健版农民伯伯2免费观看在哪里好看| 金价连跌首饰金销量猛增| 我和僵尸有个约会粤语| 坎贝奇《无憾》完整版在线观看| 逆转裁判电影| 雪豹38集| 孙颖莎说的PIN是啥| 周弘版《村枝》完整| 敢死队4| 无名之辈电影高清免费 | 间之楔旧版| 秘书在办公室被躁到高潮| 啦啦队长| 电视剧《漂白》在线观看免费| 激战丛林在线观看| xl司令全集免费观看高清| 新神榜 杨戬| 后宫 帝王之妾在线观看| 战神王妃全集免费| 电视剧今生有你全集免费观看| 与部长出差在线观看| 《爱恋》电影完整版在线观看| 奇妙的美发沙龙2| 鬼父手机在线看1到16集| 变形金刚七| 韩国售楼小姐电影在线观看完整版| 欧美经典黑白配在线观看| 超级艳情生活在线观看| 港剧反黑英雄免费观看| 虎胆龙威5高清国语| 青蛙王子| 正在播放: JUQ-150 五日无夫,命禁欲至初一夜。不想要的政治联姻,岳父的目标是 | 龙年档案剧情简介详细 | 弟弟的女友 电影| 电影女性乳层按摩| 人民检察官在线观看| 麻生希的种子| 风语者高清| 海角7号| 偿还债务妻子5免费观看电视剧| 我爱几何电影在线免费观看| 奥迪双钻悠悠球寒冰| 二胡美女谁最漂亮| 神医弃女全集免费| 特种兵之火凤凰共多少集| 两个人的二人世界原声| 《炸天小姐》电影免费观看上 | 金瓶梅2百度影音| 独狼电视剧全集高清| 《天字号监狱》在线完整版免费观看 | 党同伐异免费| 欢乐颂4免费观看| 中国女篮PK法国| xl司令第一季全集免费完整版在线观看 | 《圣特罗佩斯姑娘们》| 爱拍穿越火线跑酷| 巴啦啦小魔仙之彩虹心石11| 蓝宝石之谜| 《灭火宝贝》| 台剧《浪漫女家教》在线观看| 壮志凌云杰西简在线观看| 老虎和兔子| 猛鬼差馆2| 史诗电影| 高清被女孩子逆推不行吗?未删减| 《一对三》韩剧姜汉娜结局| 一路向西迅雷种子| 热浪滚汤电影免费播放在线观看| 电视剧《寻路》| 差差差30分钟无盖视频| 挣扎吧亚当君第二季| 木下檀檩子jlU698电影| 电影《干柴烈火》| 西域尸毒| 《八佰》电影免费观看| 青梅竹马是消防员[柴犬]| 法国版《女超人:麦乐迪》| 麦乐迪美剧| 小姨子韩国电影| 迦楠大人的白给是恶魔级全集观看| 美容店的待遇电影| 爱上特种兵免费观看| 黑暗荣耀第二季| 八戒八戒在线观看免费观看电视剧| 战狼6免费观看在线播放下载高清版 | 初次尝鲜免费观看全集完整版| 电影朋友的妈妈在线观看| 动感小站之星妖精169集| 坎贝奇的电影在线观看| 尸城在线| 高清《献身》李丽珍免费观看| 姐妹牙医完整版| 《图书馆的女朋友》第一季免费 | 《牙医姊妹》完整版1986| 灵域电视剧在线观看完整版免费| 人蛇欲血战之错体美女蛇| 我的灿烂人生下载| 原千岁主演的全部电影| 月上柳梢头的下一句是| 校花的贴身高手无删减版电视剧| 电影雄兵出击免费看| 美丽的小蜜蜂3:美丽人生| 《海洋之恋》电影| 乡下大叔成为剑圣| 我女友的妈妈双字ID免费韩剧| 斗罗大陆第二季全集免费观看完整版 | 欲女进化论| 红衣小女孩在线观看完整恐怖版| 波野结衣qvod| 侠岚动画片全集| 第8号当铺全集| 落魄贵族琉璃川动漫全集免费观看 | 少妇的味道4| 第一权谋电影免费观看| 夏家三千金电视剧全集免费| 女武神驱动免费观看| 张文慈三级| 女战狼6在线高清免费观看| 韩国售楼小姐美景之屋 | 《卷卷初恋》| 男人女人一起相愁愁愁电视剧在线观| 爸爸给我播种子免费观看| 无法开口| 警花与警犬2全集46集| 电吉他solo教学| 电视剧《女人》全集免费观看| 至尊弃少短剧全集| 美丽的丽莎意大利完整版| 塔尔萨之王免费观看西瓜| 国外成人电视台| 建党伟业在线观看完整版| 宿醉2在线观看| 我的留级岳父| 刻晴大战史莱姆免费观看高清版| 和丈夫的部下玩火的夜晚HD无字_经典电影_手机完整版在线观看_纤纤影院 | 非常小特务3国语版| 一路向西高清完整版| 沉香如屑免费观看完整版电视剧| 撒娇女人最好命| 舒克和贝塔电影| 急诊护士免费观看| 长空雄鹰| 相亲第一天就日了她| 厄里斯的圣杯未删减| 局外人电影| 水灵的继拇BD中字3 | 法国空姐满天星法版| 美国1985G点原版| 《法国护士长》在线| 小城大爱电视剧| 种啥的啥| 那场雨爱上你泰剧在线观看| 庄子哪个学派| 爱死亡与机器人| 1995年意大利版《人猿泰山》高清版| 义姐是不是良在哪里看| 群星闪耀时在线观看| 张版西游记| 电视剧娘家的故事3| 天赋异禀 美剧| 女销售| 正在播放: DRPT-048 春药曝露性爱 仓田真央带乳头导线与前女友相见 十年来同 | 《机长空姐的秘密》在线观看 | 我家那小子第二季| 灯草和尚qvod| 法国女超人电影版在线| 美景之屋免费观看全集电影完整版 | 男女一起愁愁愁免费观看全集高清完整版动漫 | 奥伊米亚康村| 武朝迷案| 爸爸种的种子第二集| 韩国售楼小姐美景之屋| 硬汉3在线观看| 犯了规短剧| 仁心解码2粤语24| 浴火奔腾浴火红免费观看电视连续剧| sss17| 武动乾坤之瑶魔乱舞| 天生一对印度| 漂亮妈妈7中字开头歌曲| 哇嘎免费观看完整版| 赵奕欢上位电影全集| 人民万岁电影| 厦门夜生活网| 公与三个媳HD| 老虎出更国语| 荣誉守则(成人版)在线观看| 满清十大刑酷电影| 战狼6免费高清版999加拿大版动漫 | 如懿传电视剧免费观看全集完整版| 《沙漠行动》满天星| 公主的诱惑| 自由的她们免费看全集完整版| 我在北京挺好的剧情分集介绍 | 东京吸血鬼酒店| 姐姐妹妹站起来舞蹈| 《啄木鸟:壮志凌云》免费观看| overflower完整版| 情感对白|