kurze Pointer- und Adress-Auffrischung
-
Hallo nochmal,
benötige eine ganz kleine Pointer- und Adressauffrischung. Ja ich habe schon gegoogled! Habe aber nur Beispiele wie:
int *ptr; int var, var2; ptr =& var; *ptr=100; var2 = *ptr;
Diese helfen mir bei meinem Problem leider derzeit nicht weiter. Ich möchte folgende Funktion "auslagern":
capture = cvCaptureFromCAM( CV_CAP_ANY ); if ( !*capture ) { fprintf( stderr, "ERROR: capture is NULL \n" ); //getchar(); return -1; } IplImage* image = cvQueryFrame( *capture ); if ( !image ) { fprintf( stderr, "ERROR: frame is null...\n" ); //getchar(); return -2; }
Ich habe das wie folgt vorbereitet aber es gibt immer Speicherzugriffsfehler:
int InitCamAny(CvCapture* capture) { capture = cvCaptureFromCAM( CV_CAP_ANY ); if ( !*capture ) { fprintf( stderr, "ERROR: capture is NULL \n" ); //getchar(); return -1; } IplImage* image = cvQueryFrame( *capture ); if ( !image ) { fprintf( stderr, "ERROR: frame is null...\n" ); //getchar(); return -2; } return 0; }
Ich weiss ich muss etwas bei den Verwendeten capture-Variablen machen, damit ich dies außerhalb der Funktion weiterhin ordentlich verwenden kann. Kann mir hier jemand bitte schnell auf die Sprünge helfen?
Vielen Dank
mirrowwinger
-
Wenn du einen Zeiger selbst by-reference übergeben möchtest (d.h. so, dass die Änderungen nach Außen getragen werden), dann musst du einen Zeiger auf den Zeiger übergeben.
-
Du kannst den Zeiger zurückgeben
CvCapture* InitCamAny(CvCapture* capture, int *error) { capture = cvCaptureFromCAM( CV_CAP_ANY ); if ( !*capture ) { fprintf( stderr, "ERROR: capture is NULL \n" ); //getchar(); *error = -1 return NULL; } ... *error = 0; return capture;
Aufruf dann mit
capture = InitCamAny(capture,&error);
oder du nimmst einen Doppelzeiger:
int InitCamAny(CvCapture** capture) { *capture = cvCaptureFromCAM( CV_CAP_ANY ); if ( !*capture ) { fprintf( stderr, "ERROR: capture is NULL \n" ); //getchar(); return -1; } ... return 0; }
Aufruf dann mit
error = InitCamAny(&capture);