Witam.
Napisałem taki kod :
#include
#include
struct stringi{
char znak;
struct stringi *next,*prev;
};
struct listholder{
struct stringi *first,*last;
}*tekst_jawny_H,*szyfrogram_H,*haslo_H;
int push(struct listholder *holder,char c){
struct stringi* newPtr;
printf(".1");
newPtr = (struct stringi*) malloc(sizeof(newPtr));
printf(".2");
newPtr->znak = c;
printf(".3");
newPtr->prev = holder->last;
printf(".4");
newPtr->next = NULL;
printf(".5");
if (holder->first==NULL)
holder->first = newPtr;
printf(".6");
if (holder->last != NULL)
holder->last->next = newPtr;
printf(".7");
holder->last = newPtr;
printf(".8 -> ");
return 0;
}
char pop(struct listholder *holder){
char tempDana;
struct stringi* tempWsk;
printf("1");
if (holder->first) {
printf("2");
tempDana = holder->first->znak;
printf("3");
tempWsk = holder->first->next;
printf("4");
free(holder->first);
printf("5");
holder->first = tempWsk;
printf("6 -> pobrano: ");
} else {
printf("Probujesz opro¿niæ ju¿ pust¹ listê!\n");
printf("7");
tempDana = -1;
printf("8");
}
return tempDana;
}
int main()
{
char c;
tekst_jawny_H = (struct listholder*)malloc( sizeof( tekst_jawny_H ) );
c='a';
push(tekst_jawny_H,c);
printf("added a\n");
c='b';
push(tekst_jawny_H,c);
printf("added b\n");
c='c';
push(tekst_jawny_H,c);
printf("added c\n");
c=pop(tekst_jawny_H);
printf("%c\n",c);
c=pop(tekst_jawny_H);
printf("%c\n",c);
c=pop(tekst_jawny_H);
printf("%c\n",c);
return 0;
}
W gruncie rzeczy jest to kolejka dwukierunkowa. Przy kompilacji nie ma żadnych problemów. Korzystam z Windows 7 x64. Aplikacja wysypuje się przy alokacji drugiego, czasem trzeciego elementu listy.
Wszystko jest ok, gdy uruchomię program w trybie zgodności z Windows XP SP3. Pod Ubuntu 10.10 (gcc) także działa bez problemu.
Jakieś pomysły? Będe bardzo wdzięczny za wszelka pomoc;)