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의 출력
== 27,380 == HEAP 요약 :
== 출구 사용 27,380 == 96 바이트 1 블록
== 27380 == 총 힙 사용 : 66 allocs, 65 개 해방, 141,257 바이트 할당
== 27380 ==
== 1되지-해제 블록
== 검사 27,380 == 포인터 검색 27380 == 141,304 바이트
== 27380 ==
== 27380 == 1 블록의 96 바이트가 손실 기록 1의 1에서 확실히 분실 됨
== 27380 == 0x4C2CE5F : malloc (/ usr/lib/valgrind/vgpreload_memcheck-amd64-linux). so)
== 27380 == 0x4E60BD6 : XGetImage (/usr/lib/libX11.so.6.3.0)
== 27380 == 0x108BB8 : main (/ home/cafeina/소스 코드/MachineLearning/공룡/cpp/get_pixel),960,453,210 == 27,380 ==
== 27,380 == LEAK 요약 : 확실히 손실
== 27,380 == 96 바이트를 1 개 블록
== 27,380 == 간접적 손실 0 0 바이트 블록으로
== 27380 == 가능성 손실 : 0 바이트를 0 블록
에 == 27380 == 여전히 연결할 수 : 0 블록
27,380 == 억제 == 0 바이트 : 0 블록
0 바이트 == 27380 ==
== 27380 == 오류 요약 : 1 컨텍스트에서 오류 1 개 (표시하지 않음 : 0에서 0)
수백 픽셀을 초당 여러 번 읽을 계획이므로이 메모리 누출을 제거해야합니다. 누구든지 적절한 방법을 알고 있습니까?
당신에게
예! 그게 해결 됐어! 고맙습니다! – cafeina