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


  • Mod

    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);


Anmelden zum Antworten