[valgrind] v4l1_open
-
Hallo c-community,
ich habe ein paar kleine Probleme mit eine Kamera mit v4l zu öffnen, ohne dass sich valgrind über uninitialisierte Byte(s) beschwert.
Folgender Maßen sieht meine Öffnungsfunktion aus:
void V4LCAMERA_OpenDevice(pClassV4LCamera V4LCamera) { struct stat st; char ErrMessage[256]; if (-1 == stat(V4LCAMERA_Get_DeviceName(V4LCamera), &st)) { sprintf(ErrMessage, "Cannot identify %s", V4LCAMERA_Get_DeviceName(V4LCamera)); errmsg_exit(V4LCAMERA, ErrMessage, 262); } if (!S_ISCHR(st.st_mode)) { sprintf(ErrMessage, "%s is no device", V4LCAMERA_Get_DeviceName(V4LCamera)); errmsg_exit(V4LCAMERA, ErrMessage, 267); } V4LCamera->CameraHandle = v4l1_open(V4LCAMERA_Get_DeviceName(V4LCamera), O_RDONLY); //V4LCamera->CameraHandle = v4l1_open("/dev/v4l/by-id/usb-The_Imaging_Source_Europe_GmbH_DFM_22BUC03-ML_03310459-video-index0", O_RDONLY); if (-1 == V4LCamera->CameraHandle) { sprintf(ErrMessage, "%s is no device", V4LCAMERA_Get_DeviceName(V4LCamera)); errmsg_exit(V4LCAMERA, ErrMessage, 277); } }
Folgende Ausgabe gibt mir valgrind mit Option --leak-check=full:
==2906== Thread 2:
==2906== Syscall param ioctl(generic) points to uninitialised byte(s)
==2906== at 0x4126547: syscall (syscall.S:31)
==2906== by 0x41B5FDF: ??? (in /usr/lib/libv4lconvert.so.0)
==2906== by 0x41A9E87: v4lconvert_create (in /usr/lib/libv4lconvert.so.0)
==2906== by 0x40582A7: v4l2_fd_open (in /usr/lib/libv4l2.so.0)
==2906== by 0x4051165: v4l1_open (in /usr/lib/libv4l1.so.0)
==2906== by 0x804A26F: V4LCAMERA_OpenDevice (CLASS_V4LCamera.c:270)
==2906== by 0x804A821: V4LCAMERA_ThreadFunction (CLASS_V4LCamera.c:437)
==2906== by 0x403A954: start_thread (pthread_create.c:300)
==2906== by 0x412A1DD: clone (clone.S:130)
==2906== Address 0x4e416d8 is on thread 2's stackWas mache ich falsch hier? Der Quellcode scheint zu funktionieren aber ich möchte verstehen, warum valgrid hier meckert.
MfG
mirrowwinger
-
edit: Hier stand etwas ungenaues