sicd
07-12-2004, 13:44
Bin dabei einen simplen aber sicheren ICQ clone unter C zu programmieren und benötigte heute stunden um auf folgenden fehler zu stoßen:
wenn ich die variablendeklaration in einer anderen reihenfolge vornehme, tritt der für mich noch nie dagewesene fehler auf, dass die systemfunktion malloc() hängen bleibt (dh nie zurückkehrt, und somit keinen return wert gibt).
Dies passiert zB wenn ich "char ** a_cmd" zur ersten zeile der char-deklarationen hinzufüge. Oder wenn "t_packet* ev" eine oder mehrere zeilen weiter unten deklariert wird.
Hat jemand eine erklärung für dieses verhalten?
Mfg
ps: kernel 2.6.7, gcc 3.3.3
int start_sic_shell(int sockfd){
char cmd[CMD_LEN], *tok, c;
long src, dst;
t_packet* ev;
char ** a_cmd;
char txt[PL_TXT];
int i, j, asize;
printf("Welcome to s.i.c v%d command line interface.\n\n", VERSION);
asize = -1;
//endless loop, for every new command input
for(; {
ev = NULL;
strcpy(txt, "");
printf("[erik@s.i.c] ");
fgets(cmd, CMD_LEN, stdin);
//free the memory!
if(asize > -1)
for(j=0; j<=asize; j++){
free(a_cmd[j]);
}
//get the cmd in an array
asize = -1;
tok = strtok(cmd, " ");
do{
a_cmd[++asize] = (char *) malloc(sizeof(tok));
strcpy(a_cmd[asize], tok);
} while((tok = strtok(NULL, " ")) != NULL);
/*******************************************
* M A I N I N T E R P R E T E R C O D E
*******************************************/
wenn ich die variablendeklaration in einer anderen reihenfolge vornehme, tritt der für mich noch nie dagewesene fehler auf, dass die systemfunktion malloc() hängen bleibt (dh nie zurückkehrt, und somit keinen return wert gibt).
Dies passiert zB wenn ich "char ** a_cmd" zur ersten zeile der char-deklarationen hinzufüge. Oder wenn "t_packet* ev" eine oder mehrere zeilen weiter unten deklariert wird.
Hat jemand eine erklärung für dieses verhalten?
Mfg
ps: kernel 2.6.7, gcc 3.3.3
int start_sic_shell(int sockfd){
char cmd[CMD_LEN], *tok, c;
long src, dst;
t_packet* ev;
char ** a_cmd;
char txt[PL_TXT];
int i, j, asize;
printf("Welcome to s.i.c v%d command line interface.\n\n", VERSION);
asize = -1;
//endless loop, for every new command input
for(; {
ev = NULL;
strcpy(txt, "");
printf("[erik@s.i.c] ");
fgets(cmd, CMD_LEN, stdin);
//free the memory!
if(asize > -1)
for(j=0; j<=asize; j++){
free(a_cmd[j]);
}
//get the cmd in an array
asize = -1;
tok = strtok(cmd, " ");
do{
a_cmd[++asize] = (char *) malloc(sizeof(tok));
strcpy(a_cmd[asize], tok);
} while((tok = strtok(NULL, " ")) != NULL);
/*******************************************
* M A I N I N T E R P R E T E R C O D E
*******************************************/