2017-10-20 43 views
-1

Je crée un allocateur de mémoire personnalisé en C mais j'ai du mal à me déplacer dans ma matrice "mem" en utilisant un pointeur qui y a été alocalisé. J'ai besoin de déplacer un index vers la gauche pour voir si le bloc avant celui que j'essaie de libérer est vide ou non. Mais le pointeur mobile ne fonctionne pas comme je le voudrais. Alors, comment puis-je déplacer un index avant le pointeur?Naviguer dans le tableau à l'aide du pointeur

int main() 
{ 
    char mem[50]; 
    char *pointer; 
    char *ptr_toFree; 

    pointer=(char *) &(mem[10]); 
    pointer = "hello"; 
    int num = 10; 
    mem[9] = num; 

    ptr_toFree=(char*)(pointer-1); 
    printf("Value of mem[9] = %d\n", *ptr_toFree); 

    return 0; 
} 
+0

'pointer-1' a un comportement indéfini. – melpomene

+0

FWIW, 'pointer = (char *) & (mem [10]);' est simplement une façon compliquée d'écrire 'pointer = mem + 10;' –

+0

Votre programme peut être réduit à 'printf ("% d \ n " , "bonjour" [- 1]) ', ce qui est clairement invalide. – melpomene

Répondre

0

Si vous créez un allocateur de mémoire personnalisé, vous devez mettre en œuvre malloc, realloc/gratuit etc, comment vous garder une trace des allocations de mémoire est à vous (en général une sorte de tête fixe juste avant la pointeur retourné à l'appelant), il n'y a pas de 'standard', donc vous ne pouvez pas simplement soustraire n octets d'un pointeur et commencer à creuser. `Pointer` pointe vers le premier élément du tableau statique` "bonjour" `. '