2017-11-29 14 views
1

X11/Xutilライブラリを使用して画面からピクセルを取得しようとしていますが、valgrindによると、コード内のメモリリーク:"X11/Xutil.h"ライブラリを使ってピクセルを読み取るときにメモリリークが発生する(valgrind出力あり)

get_pixel.cpp

#include <iostream> 
#include <X11/Xutil.h> 

int main(int argc, char** argv) 
{ 
    Display *display = XOpenDisplay(nullptr); 

    int x = 10; 
    int y = 10; 
    XImage *image; 
    image = XGetImage(display, RootWindow(display, DefaultScreen(display)), 
     x, y, 1, 1, AllPlanes, XYPixmap); 

    XColor color; 
    color.pixel = XGetPixel(image, 0, 0); 
    XFree(image); 
    XQueryColor(display, DefaultColormap(display, DefaultScreen (display)), &color); 
    std::cout << color.red/256 << " " << color.green/256 << " " << color.blue/256 << "\n"; 

    XCloseDisplay(display); 
    return 0; 
} 

Valgrindの出力

== 27380 == HEAP概要:出口での使用に
== 27380 ==:96のバイトでの1ブロック
== 27380 ==合計ヒープ使用量:66のallocs、65の解放し、141257のバイト割り当て
== 27380 ==
== 1ではない、解放ブロック
==チェック27380 ==へのポインタを検索27380 == 141304バイト
== 27380 ==
== 27380 == 1ブロック中の96ブロックが失われたレコードの1/1になります。
== 27380 == 0x4C2CE5F:malloc(/ usr/lib/valgrind/vgpreload_memcheck-amd64-linux)。 (/ home/cafeina /ソースコード/ MachineLearning)
== 0x4E60BD6:XGetImage(/usr/lib/libX11.so.6.3.0)
== 27380 == 0x108BB8:メイン/恐竜/ cpp/get_pixel)
== 27380 ==
== 27380 ==リーク概要:間違いなく失っ
== 27380 == :1つのブロック
96バイト== 27380 ==間接的に失われた:0のブロック0バイト
は== 27380 ==おそらくは失わ:0ブロック内の0バイト
== 27380 ==まだ到達:0ブロック内の0バイト抑制
== 27380 == 0のブロック0バイト
== 27380 ==
== 27380 ==エラー概要:1つのコンテキストから1つのエラー(抑制:0から0)

私はこのようなメモリリークを取り除く必要があるので、何百ものピクセルを毎秒何回も読み込む予定です。 誰でもこれを行う適切な方法を知っていますか?

は、あなたの代わりにはXFreeの

答えて

2

使用XDestroyImageを(画像)(画像)

+1

はいありがとうございました!それはそれを解決しました!ありがとうございました! – cafeina

関連する問題