2013-01-04 4 views
1

J'essaie de créer un tableau dynamique qui stocke les mots d'une phrase donnée dans un tableau 2D dynamique en utilisant un double pointeur, mais chaque fois que je donne plus de trois mots , je reçois l'erreur suivante:glibc détectée: realloc(): invalide taille suivante

*** glibc detected *** ./a.out: realloc(): invalid next size: 0x000000000255a030 ***

Code pertinent ci-dessous:

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
    char **ptr=NULL; 
    char letter;  
    int ptrsize=1, wordsize=1; 
    ptr=malloc(ptrsize*sizeof(char *)); 
    ptr[ptrsize]=(char *)malloc(wordsize*sizeof(char)); 
    do 
    { 
      letter=getchar(); 
      while ((letter!=' ')&&(letter!='\n')) 
      { 
        ptr[ptrsize][wordsize]=letter; 
        *ptr= realloc(*ptr,wordsize+1); 
        wordsize++; 
        letter=getchar(); 
      } 
      ptrsize++; 
      ptr = realloc(ptr,ptrsize*sizeof(char)); 
      wordsize=1; 
      ptr[ptrsize]=malloc(wordsize*sizeof(char)); 
    } 
    while (letter!='\n'); 
    return 0; 
} 

J'ai réussi à augmenter la taille de la peine en faisant des modifications à la malloc et realloc de la double pointeur, mais n'ont toujours pas trouvé de solut solide ion. Merci d'avance.

+0

duplication possible de [Faire face à une erreur "\ * \ * \ * glibc détectée \ * \ * \ * free(): invalide taille suivante (rapide)"] (http://stackoverflow.com/questions/2317021/ face-a-error-glibc-detected-free-invalid-next-size-fast) –

Répondre

2

Ce code

ptr=malloc(ptrsize*sizeof(char *)); 
ptr[ptrsize]=(char *)malloc(wordsize*sizeof(char)); 

Et les lignes similaires répétées plus tard dans le corps de la boucle sont incorrectes.

Un tableau similaire

Type* ptr = malloc(N * sizeof(Type)); 

a des indices valables à partir de 0 à N - 1. ptr[N] sera toujours passé la fin du tableau. Ecrire dans cette mémoire et/ou la réattribuer risque de corrompre les structures de données de tas.

+0

Est-ce que cette ligne: 'int ptrsize = 1, wordsize = 1;' résout le problème? Puisque la première valeur est un, le tableau n'a-t-il pas d'index valides de 1 à N? – SGuard

+0

Non. Ils commencent toujours à 0. –

+0

J'ai corrigé les initialisations et les tailles et maintenant ça fonctionne bien. Merci beaucoup! – SGuard

Questions connexes