Computer Hardware Forum - TweakPC

Computer Hardware Forum - TweakPC (https://www.tweakpc.de/forum/)
-   Programmiersprachen (https://www.tweakpc.de/forum/programmiersprachen/)
-   -   C-Speicherverwaltungs problem (https://www.tweakpc.de/forum/programmiersprachen/80939-c-speicherverwaltungs-problem.html)

mokus 01.03.2011 10:02

C-Speicherverwaltungs problem
 
Jo,
ich hab seit neusten mit C angefangen, programmiertechnisch aber schon jahre lange erfahrung. Jetzt bin ich aber nen bisschen mit der Speicherverwaltung überfordert und deren auswirkung.

Ich habe eine Pointer-Variable vom typ int "gameField", dort speicher ich auf 42 Feldern Werte, wie in einem zwei dimensionalem Array.

Nebenbei hab ich noch eine Struct-Variable "first", in dieser Speicher ich den Highscore wenn es mal funktioniert. Diese Einträge werden verketten und läuft auch Super.

Mein Problem ist, dass nachdem ich die Methode "FillGameField" ausführe, ich danach keine weiteren Highscore Einträge erstellen kann oder eher gesagt, keinen einzigen...

InsertStatisticEntry <- Erstellt einen neuen Eintrag

VS sagt mir nur das der Heap beschädigt ist, kann damit aber selber nix anfangen.

[code]

// Strukturen
struct StatisticStruct {
char* name;
StatisticStruct *next;
};

struct StatisticStruct *first;
int *gameField= (int*)malloc(42);

// Spielfeld
// Füllt das Spielfeld "0"
void FillGameField(){

for(int i = 0; i < (7*6); i++)
*(gameField+i) = 0;
}


// Eingabe
// Fängt eine Dezimal-Tastatur eingabe ab.
int ValidUserInput(){

int value = 0;
scanf("%d",&value);

if(value > -1) {
fflush(stdin);
return value;
}
else {

fflush(stdin);
return ValidUserInput();

}

}

void InsertStatisticEntry( char* name)
{
struct StatisticStruct* ptr;

if( first == NULL )
{
first= (StatisticStruct*)malloc(sizeof( *first ) );

first->name = name;
first->next = NULL;
}

else
{
ptr = first;

while( ptr->next != NULL )
ptr = ptr->next;

ptr->next = (struct StatisticStruct *)malloc( sizeof( *ptr ) );

ptr = ptr->next;

ptr->name = name;
ptr->next = NULL;
}


}

int _tmain(int argc, _TCHAR* argv[])
{

[COLOR=Red][B] // Wenn ich weg bin, funktioniert es...
[/B][/COLOR] [B][COLOR=Red] FillGameField();[/COLOR]
[/B]
InsertStatisticEntry("test 1");
InsertStatisticEntry("test 2");

InsertStatisticEntry("test 2");
// Liste auslesen
struct StatisticStruct *ptr = first;
while( true ) {

printf(ptr->name);
printf("\n");

if(ptr->next == NULL)
break;

ptr = ptr->next;

}

scanf("%d");

return 0;


}
[/code]

Point 01.03.2011 20:31

AW: C-Speicherverwaltungs problem
 
Auch wenns eine Umgehung darstellt und keine Lösung:
Warum benutzt du nicht int gameField[42]
und dann in for-Schleife einfach gameField[i] = 0 ?

mfg Point

mokus 02.03.2011 09:31

AW: C-Speicherverwaltungs problem
 
Muss leider rein mit Pointern arbeiten :(

mokus 03.03.2011 14:59

AW: C-Speicherverwaltungs problem
 
Das Problem hat sich erledigt, die malloc zuweisung war einfach falsch.

[B]int *gameField= (int*)malloc(42*sizeof(int));[/B]


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:29 Uhr.

Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.