Maison  >  Questions et réponses  >  le corps du texte

Un problème malloc dans la liste chaînée C++

J'ai défini une structure comme suit :

typedef struct CommandNode {
    int type;
    vector<string> command;
    CommandNode *next;
} CommandList,*CommandListNodes;

Il y a un vecteur dans cette structure, et maintenant je veux l'utiliser comme liste chaînée. Je ne sais pas comment mallocer le vecteur.

J'avais l'habitude de mallocer un 1000 au hasard, et parfois les problèmes suivants survenaient :

malloc: *** error for object 0xffbbe8909090ffff: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

De plus, je ne sais pas si je peux l'utiliser de cette façon :

    CommandListNodes listNodes = new CommandList;
    CommandListNodes p = listNodes;
    
    p->command.push_back("121212");
    
    p->type=100;
    p->next=new CommandList;
    
    p = p->next;
    
    p->command.push_back("343434");
    
    p->type=200;
    p->next=new CommandList;
    
    p = p->next;

Et quelle est la différence entre cela et malloc ? Actuellement, ma compréhension de cette partie des connaissances est relativement confuse. Je n'ai pas trouvé de contenu particulièrement adapté sur Internet. J'espère que certains amis pourront faire le tri.

習慣沉默習慣沉默2657 Il y a quelques jours766

répondre à tous(1)je répondrai

  • typecho

    typecho2017-06-14 10:53:40

    N'oubliez pas que l'allocation dynamique de mémoire en C++ est liée aux pointeurs. Par exemple, pour accéder au contenu pointé par un pointeur int, sa mémoire doit être allouée. Cela signifie que si un pointeur n'est pas initialisé à l'aide de & (adresse) ou d'une affectation, il doit alors être initialisé à l'aide de méthodes d'allocation de mémoire dynamique telles que new ou malloc pour garantir que la mémoire pointée par le pointeur existe. Pour les vecteurs, vous pouvez soit utiliser vector<T> name pour déclarer un vecteur, soit utiliser vector<T> * p = new vector<T>

    répondre
    0
  • Annulerrépondre