awehrm
01-08-2006, 10:12
Hallo!
Ich habe folgenden Code:
if((article=(Article*)malloc(sizeof(Article)*MAX_E NTRIES)) == NULL && (cat=(Category*)malloc(sizeof(Category)*MAX_ENTRIE S)) == NULL)
{
printf("\nMemory allocation failed!\nExiting...\n");
exit(1);
}
.
.
.
.
if(!(*article_amount))
{
memset((void*)article,0,MAX_ENTRIES*sizeof(Article ));
}
if(!(*cat_amount))
{
memset((void *)cat,0,MAX_ENTRIES*sizeof(Category));
}
Es soll für beide Structs entsprechend Speicher für ein Array alloziert werden.
MAX_ENTRIES ist ein per #define definierter Wert von 4*1024.
Theoretisch müssten beide Allozierungen durchgeführt werden, da beide
Bedingungen per UND verknüpft sind.
Ich habe aber festgestellt, dass in diesem Falle nur Speicher für article
angefordert wird.
Wenn ich die Pointer nämlich überprüfe sagt mir das Programm bei cat jediglich "(nil)", also hat gar keine Allozierung stattgefunden.
Später stürzt das Programm dann natürlich bei memset ab.
Im Moment habe Ich einfach zwei If-Abfragen hintereinander geschrieben, was aber unschön aussieht.
Müsste der erste Weg denn nicht auch möglich sein?
Ich habe folgenden Code:
if((article=(Article*)malloc(sizeof(Article)*MAX_E NTRIES)) == NULL && (cat=(Category*)malloc(sizeof(Category)*MAX_ENTRIE S)) == NULL)
{
printf("\nMemory allocation failed!\nExiting...\n");
exit(1);
}
.
.
.
.
if(!(*article_amount))
{
memset((void*)article,0,MAX_ENTRIES*sizeof(Article ));
}
if(!(*cat_amount))
{
memset((void *)cat,0,MAX_ENTRIES*sizeof(Category));
}
Es soll für beide Structs entsprechend Speicher für ein Array alloziert werden.
MAX_ENTRIES ist ein per #define definierter Wert von 4*1024.
Theoretisch müssten beide Allozierungen durchgeführt werden, da beide
Bedingungen per UND verknüpft sind.
Ich habe aber festgestellt, dass in diesem Falle nur Speicher für article
angefordert wird.
Wenn ich die Pointer nämlich überprüfe sagt mir das Programm bei cat jediglich "(nil)", also hat gar keine Allozierung stattgefunden.
Später stürzt das Programm dann natürlich bei memset ab.
Im Moment habe Ich einfach zwei If-Abfragen hintereinander geschrieben, was aber unschön aussieht.
Müsste der erste Weg denn nicht auch möglich sein?