J'ai une erreur en utilisant realloc
pour remplacer malloc
.realloc: checksum invalide pour objet libéré
Ce code ci-dessous s'exécute correctement sur mon ordinateur.
int vector_grow(Vector* vec) {
unsigned long newcap;
int * newarr;
if (0 == vec->cap) {
vec->arr = (int*)malloc(START_CAPACITY * sizeof(*vec->arr));
if (NULL == vec->arr)
return -1;
vec->cap = START_CAPACITY;
return 0;
}
newarr = malloc (newcap * sizeof(*vec->arr));
if (NULL == newarr)
return -1;
memcpy (newarr, vec->arr, vec->len * sizeof(*vec->arr));
free (vec->arr);
vec->arr = newarr;
vec->cap = newcap;
return 0;
}
Je veux changer le malloc
à realloc
, mais l'erreur se produit.
int vector_grow(Vector* vec) {
unsigned long newcap;
if (0 == vec->cap) {
vec->arr = (int*)malloc(START_CAPACITY * sizeof(*vec->arr));
if (NULL == vec->arr)
return -1;
vec->cap = START_CAPACITY;
return 0;
}
newcap = 2 * vec->cap;
if ((vec->arr = (int*)realloc(vec->arr, newcap * sizeof(int))) == NULL)
return -1;
return 0;
}
Il dit
malloc: *** erreur pour objet 0x7fca64c02598: contrôle incorrect pour objet libéré - objet a probablement été modifié après avoir été libéré.
Je ne connais aucune différence entre ces deux extraits de code, si vous savez ce qui cause l'erreur, s'il vous plaît dites-moi! Merci beaucoup!
Notez que l'utilisation 'realloc()' comme ça provoque une fuite de mémoire. –
dans la première variable d'extrait de code 'newcap' n'est pas initialisée du tout ?! –
.Traitement intuitif des conditions Yoda Également –