noch ein problem



  • Es muss heißen

    A[i]=pow(*x,(double)i);
    

    und #include <math.h> wegen pow

    oder ohne pow

    float *mypot(float *x,unsigned int n){
      size_t i;
      *A=malloc(n+1);  
      A[0] = 1; // per Definition
      for(i=1;i<=n;i++)
        A[i]=A[i-1] * *x;
      return A;
    }
    


  • Naja ich bekomme ja bei sowas eine Heap Corruption...

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <math.h>
    
    float* mypot(float *x, const unsigned int& n)
    { 
    	float* B = (float*)malloc(n+1); 
    
    	for(unsigned int i = 0; i <= n; i++)
    		B[i]=pow(*x,(int)i); 
    
    	*x = pow(*x, (int)n); 
    
    	return B; 
    } 
    
    int main()
    { 
    	const unsigned int n=2;
    	float x=3., *A = mypot(&x, n);
    
    	for(unsigned int i = 0; i < n + 1; i++)
    		printf("Array: %f\n",A[i]);
    
    	printf("x: %f",x);
    
    	//free(A); //Heap corruption
    
    	getchar();
    	return 0; 
    }
    


  • ich versteh das nicht...

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    float *mypot(float *x, const unsigned int &n)
    {
        float *B = (float*)malloc(n+1);
        unsigned int i;
        for(i = 0; i <= n; i++)
            B[i]=pow(*x,(int)i);
    
        *x = pow(*x, (int)n);
    
        return B;
    }
    
    int main()
    {
        const unsigned int n=2;
        float x=3., *A = mypot(&x, n);
        unsigned int i;
        for(i = 0; i < n + 1; i++)
            printf("Array: %f\n",A[i]);
    
        printf("x: %f",x);
    
        //free(A); //Heap corruption
    
        getchar();
        return 0;
    }
    

    zeigt bei mir fehler..
    und

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    float *mypot(float *x,unsigned int n){
    size_t i;
    float f=n,*A=malloc((n+1)*sizeof*x); /* <-- jetzt korrekte Speichergröße */
      for(i=0;i<=n;i++)
        A[i]=pow(*x,f);
    return A;
    }
    
    int main(){
    unsigned n=2;
    float x=3.,*A=mypot(&x,n);
    printf("x: %f", x);
    ++n;
    while( n-- ) printf("\n%f",A[n]);
    free(A);
    return 0;
    }
    

    läuft zwar, aber um ehrlich zu sein hab ich das nicht wirklich verstanden.. 😞
    welches ist jezt richtig?

    danke für eure hilfe



  • Richtig ist keins von beiden.
    Beim ersten ist der malloc falsch (fehlendes sizeof)
    Beim zweiten ist die Berechnung falsch. Das liefert n+1 mal die gleiche Zahl.
    Richtig:

    A[i]=pow(*x,(double)i); // pow erwartet zwei double
    


  • geirrt.



  • Dir ist schon klar, dass in C keine Funktionsüberladungen existieren?

    Wir kennen langsam dein ödes cplusplus.com, aber selbst da:

    Die unnötige Referenz schrieb:

    In C, only the version taking two double parameters exists with this name. The other overloads are only available in C++.



  • aber da kommt segmentation fault beim ausführen 😞
    wieso klappt das nicht
    😞



  • problemkinder schrieb:

    aber da kommt segmentation fault beim ausführen 😞
    wieso klappt das nicht
    😞

    segmentation fault deutet auf falschen Speicherzugriff hin.

    Gibt das Programm den irgendetwas aus?
    Ansonsten mach mal ein paar printf rein:

    const unsigned int n=2;
        float x=3., *A = mypot(&x, n);
        unsigned int i;
    
    const unsigned int n=2;
        float x=3., *A;
        unsigned int i;
    
        printf("Rufe mypot auf: %p\n", A);
        A = mypot(&x, n)
        printf("Rufe mypot fertig: %p\n", A);
    

    entsprechend in mypot.



  • DirkB schrieb:

    problemkinder schrieb:

    aber da kommt segmentation fault beim ausführen 😞
    wieso klappt das nicht
    😞

    segmentation fault deutet auf falschen Speicherzugriff hin.

    Gibt das Programm den irgendetwas aus?
    Ansonsten mach mal ein paar printf rein:

    const unsigned int n=2;
        float x=3., *A = mypot(&x, n);
        unsigned int i;
    
    const unsigned int n=2;
        float x=3., *A;
        unsigned int i;
    
        printf("Rufe mypot auf: %p\n", A);
        A = mypot(&x, n)
        printf("Rufe mypot fertig: %p\n", A);
    

    entsprechend in mypot.

    klappt nicht... also da steht ja eig. printf("x: %f",x); sollte der ja ausgeben aber macht er nicht

    wofür ist eigentlich free(A)???
    und wieso läuft das programm nicht
    bin voll verzweifelt



  • klappt nicht... also da steht ja eig. printf("x: %f",x); sollte der ja ausgeben aber macht er nicht

    Poste doch mal den aktuellen Code.

    wofür ist eigentlich free(A)???

    Du forderst mit malloc Speicher vom Heap, den must auch wieder freigeben.

    und wieso läuft das programm nicht
    bin voll verzweifelt

    Ich/wir kennen das aktuelle Programm ja gar nicht.


Anmelden zum Antworten