Realloc errore realloc(): invalid pointer: 0x00000...

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Realloc errore realloc(): invalid pointer: 0x00000...

    Chiedevo a te ... lo hai riscritto e provato ma non ci hai detto se va bene !
  • Re: Realloc errore realloc(): invalid pointer: 0x00000...

    Ahhh scusa si ho provato e sembra funzionare bene... ora faccio altri esercizi così mi rendo conto se ho capito realmente..
    grazie mille per l'aiuto
  • Re: Realloc errore realloc(): invalid pointer: 0x00000...

    Guarda , a me crasha comunque. Ho notato che sistematicamente l'ultimo vecchio elemento dell'array sembra "perdersi", dacci un occhiata
  • Re: Realloc errore realloc(): invalid pointer: 0x00000...

    Uhmm va in crash solo qundo inserisco tanti valori... devo aggiungere un elemento nella realloc per assegnarlo al '\0'?
  • Re: Realloc errore realloc(): invalid pointer: 0x00000...

    No non credo che ci sia bisogno. Comunque per tanti valori intendi + di 1000?
  • Re: Realloc errore realloc(): invalid pointer: 0x00000...

    Si .. cmq non ho capito dove sbaglio perchè facendo un'altro esercizio crasha anche su numeri piccoli
    
    /*3.2  Rovescia  - p2
    L’input è dato da una sequenza di numeri terminata da 0;
    non potendo prevedere quanti numeri verranno inseriti, il  vettore  andrà  ridimensionato 
    man  mano:  partite  da  una  dimensione  fissata  piccola  (es:  2)  e  raddoppiate  la
    lunghezza del vettore ogni volta che questo si riempie
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int *my_alloc(int i);
    int *my_realloc(int *p, int size);
    int contaelem(int *p);
    
    int main (void)
    {
      int *a, num=2,i=0, numletto;
     
      a=my_alloc(num);
    
      printf("Inserisci una sequenza di numeri terminata da zero 0");
      do
      {    
          scanf ("%d", &numletto );    
           if (i==(num-1))
            {
             a=my_realloc(a,num*2);
             num*=2;
            }
           //num=contaelem(a);
           a[i]=numletto;
           i++;
      }while (numletto!=0) ;
    
      num=contaelem(a);
     
      for (i=num-1; i>=0;i--)
          printf("\n valore %d=>%d\n", i, a[i]);
     
      free(a); 
      return 0;
    }
    //funzioni
    int *my_alloc(int i)
    {
        int *p;
        p=malloc(i * sizeof(int));
    
        if (p==NULL)
        {
            printf("Memoria allocata non suff!");
            exit(EXIT_FAILURE);
        }
        else
            return p;
    }
    int *my_realloc(int *p, int size)
    {
        int *pnew;
        pnew=realloc(p,size+1);
        if (pnew==NULL)
        {
            printf("memoria non suff");
            exit(EXIT_FAILURE);
        }
        else return pnew;
       
    }
    
    int contaelem(int *p)
    {
       int *arr, elem=0;
       arr=p;
      
       while (arr[elem]!='\0')
         elem++;
        
      return elem;
    }
    
  • Re: Realloc errore realloc(): invalid pointer: 0x00000...

    Controllo subito. Comunque se hai fatto molte prove e sono fallite riavvia il pc così liberi la ram. Il vecchio programma regge anche per circa 5000 elementi. A quanto vedo le celle di memoria allocate risultano contigue come se fosse un array statico,perciò mi viene da pensare che al crescere della dimensione, se capitassero "nel mezzo" altre celle già dedicate ad altro potrei spiegarmi i crash occasionali. Nei Debug in queste occasioni non arrivava nemmeno al free.
  • Re: Realloc errore realloc(): invalid pointer: 0x00000...

    Ma come ho fatto a non accorgermene prima! quando chiami la tua funzione my_realloc(array,size) e my_alloc(array,size) hai dimenticato di moltiplicare la dimensione dell array per il giusto spazio che occupa il tipo di dato in memoria! quindi in entrambi i programmi
    
    	 printf("quanti elementi vuoi inserire?");
    	scanf("%d", &size);
    	a = my_alloc(size*sizeof(int)); 
    	...
    	...
    	...
    	a = my_realloc(a,(size +x)*sizeof(int));
    
    
  • Re: Realloc errore realloc(): invalid pointer: 0x00000...

    Provato e funziona tutto .... grazie mille
    in verità mancava solo sulla realloc perchè nella funzione my_alloc lo facevo:
    int *my_alloc(int n)
    {
      int *p;
      p=malloc(n* sizeof(int));
      if (p==NULL)
         {
            printf("Mermoria heap non suff!");
            exit(EXIT_FAILURE);
         }
         else return p;
    }
Devi accedere o registrarti per scrivere nel forum
23 risposte