Je suppose que vous nous demandez de vous aider avec vos devoirs, donc je ne vais pas résoudre tous vos problèmes de code pour vous. Je vais seulement souligner votre erreur la plus flagrante, qui est l'erreur que vous avez posée - pourquoi le deuxième appel à votre fonction create_Set()
échouer?
Test.c, lignes 27-28:
Set* s2;
Set_Create(s2); //.. Here error comes..
En set.c, j'ai coupé vers le bas au code significatif:
void Set_Create(Set* set){
if(set == NULL){
set = (Set *)malloc(sizeof(Set));
}
set->size = 0;
set->data = -1;
set->next = NULL;
}
Ce qui se passe est que les deux de vos appels au Set_Create
remplacent certains emplacements de mémoire arbitraires et imprévisibles. C'est un bug sérieux.
Dans le cas de set1
, le pointeur arbitraire que vous avez rencontré semble pointer vers un endroit de la mémoire dans lequel vous pouvez écrire. Qui sait quelles données vous êtes en train de taper, mais vos données peuvent survivre à cet endroit pendant une courte durée.
Dans le cas de set2
, le pointeur arbitraire que vous rencontrez est pas un emplacement de mémoire valide pour vous de modifier, de sorte que votre programme se bloque.
Changer votre create_Set
comme ceci:
Set* Set_Create() {
Set * set = calloc(1, sizeof(Set));
set->data = -1;
return set;
}
Et test.c:
Set * set1 = Set_Create();
Est-ce un devoir? –
Cette forme de question n'attire généralement pas beaucoup d'aide sur Stack Overflow. Si votre code est raisonnablement compact, vous pouvez l'insérer en ligne (regardez l'aide à la mise en forme dans la barre latérale sur la page d'édition!) Et vous obtiendrez probablement plus d'attention. Si votre code n'est pas compact, essayez d'afficher un sous-ensemble sélectionné ... mais vous aurez besoin d'avoir une théorie sur ce qui se passe pour y arriver. – dmckee
Si vous êtes réellement, * vraiment * coincé, pensez à faire un pas à travers le code pour voir ce qui se passe (p.ex. obtenir un tableau blanc ou un gros morceau de papier, écrire des boîtes pour représenter la variable code à la fois ...). – dmckee