zeiger auf funktionen



  • Hallo Leute,ich habe ein Pb.warum stürzt mein Programm ab.Was ist bei der Aufruf der Funktion falsch?

    #include<iostream.h>
    // using namespace std;
    #include<stdlib.h>
    
    float *funktion(float *array[], int n);
    
    float max;
    	float* vector = new float;
    
    void main(void)
    {
    
    		int len;
    	float *max_wert;
    	cout<<"Wie lang soll das array werden:"<<endl;
    	cin >> len;
    
    	 vector = new float[len];
    		cout<<"Geben Sie die werte ein:";
      for(int i=0;i<len;++i)
      {
         cin >> vector[i];
      }
    
    cout<<" die Werte  sind:"<<endl;
     for(int k =0;k<len;++k)
      {
    	cout<<"\t"<<vector[k];
      }
    cout<<endl;
    
    	max_wert= funktion(&vector,len);
      //cout<<"Maxi="<<max_wert<<endl;
      //cout<<"Maxi="<<*funktion(n)<<endl;
      //cout<<"Maxi ="<<*funktion(&vector,len)<<endl;
    }
    
    float *funktion(float *array[], int n)
    {
    	 int i=0;
      float *p_max;
      max = *array[i];
    
    /*for(int k =0;k<n;++k)
      {
    	cout<<"\t"<<array[k];
      }*/
    
      while(i<n){
        if(*array[i]>max)
          max  = *array[i];
    	//array[i]  = max;
        i++;
      }
      p_max = &max;
      cout<<" Der grosste Wert ist"<< max<<endl;
      cout<<" Die Adresse der grosste Wert ist "<<&max<<endl;
    
      return(p_max);
    }
    

    /edit: Bitte C++ Code Tags verwenden



  • du willst sicher zuerst dereferenzieren und dann mit dem operator[] auf dein array zugreifen, also

    (*array)[i]
    

    und außerdem zeigt dein "p_max" nicht auf ein element im array, sondern auf die lokale variable max. irgendwo gehört statt

    p_max = &max;
    //stattdessen
    p_max = *array + x; //x ist offset des größten elements
    

    du verwendest außerdem zuviele globale variablen, und vergisst ständig, delete (bzw. delete []) und das new im globalen bereich ist auch zuviel des guten.



  • Danke!
    ich habe das array in einer funktion erzeugt und habe den new , sowie vector in main geräumt.


Log in to reply