Hilf mir, ich bin nur ein Neuling.Verknüpfte Liste in C, Namen überschreiben
Ich studiere und übe derzeit eine verkettete Liste in C. Ich möchte die Namen der Instrumente nach ihren Größen ordnen.
Problem ist, jedes Mal, wenn ich ein neues Instrument erstelle, werden die Namen der vorherigen Instrumente von meinem neu erstellten Instrument überschrieben, aber die Größen werden nicht überschrieben.
Warum und was passiert dort?
zum Beispiel, das erste Instrument ist "FLUTE" und Größe ist 1, es wird diese Informationen anzeigen. Aber wenn die 2. Schleife kommt und ich das zweite Instrument ex. Eingib, ist der Name "TRUMPET" und die Größe ist 3, "FLUTE" weg ..! Es wird angezeigt
Name: TROMPET, Größe: 1 // aber die Größe ist immer noch da.
Name: trompete, Größe: 3
//here's my main
int main(void)
{
int add = 1;
int size;
char name[30];
instrument *start = NULL;
instrument *x = NULL;
instrument *y = NULL;
instrument *next = NULL;
while(add != 0)
{
printf("Enter the name of the instrument: ");
scanf(" %29s", name);
printf("Size: ");
scanf(" %d", &size);
next = pos(name, size);
if(start == NULL)
{
start = next;
}
if(x != NULL)
{
x->next = next;
}
x = next;
//for now, I'll just display the instruments instead of sorting them.
displayInstruments(start);
printf("\nDo you want to add more?: ");
scanf(" %d", &add);
}
freeInstruments(start);
return 0;
}
//this is my instrument creator function
instrument* pos(char *name, int size)
{
instrument *i = malloc(sizeof(instrument));
i->name = name;
i->size = size;
i->next = NULL;
return i;
}
//and other codes below here that don't matter for now. . . . . . . .
.
.
.
.
call 'pos (strdup (name), size)' dies wird eine Kopie des Namens – pm100
Vielen Dank. Jetzt hab ich es verstanden. Also muss ich zuerst den Namen kopieren, da alle auf die gleiche Adresse zeigen. Tnx. Aber über den Raum, den die Funktion "strdup()" geschaffen hat, wohin wird es gehen? Stapel oder auf dem Haufen? – Bicolano
Haufen - und Sie müssen es befreien (es gibt keine kostenlosen Mittagessen in C Land) – pm100