I am working on following code snippet and am having problems stated below. Please help me:
I am able to print everything correctly in the printf of first for loop.(one in Green)Code:typedef struct { char* hostname; int connects; } Str; char * getandprint(int *argcnt, Str * strarr) { static char buff[8]; int i,k; Str *strarr1=0; strcpy(buff,"PRINTER"); //this will be returned *argcnt=getcount(); printf("count is %d\n",*argcnt); for (i=0;i<(*argcnt);i++) { strarr1=(Str *)malloc(sizeof(Str)); if(strarr1 !=(Str *)0){ memset(strarr1,0,sizeof(Str)); seqarr1=GetStr(); if(seqarr1 !=(Str *)0) { strarr[i]=*strarr1; free(strarr1); printf("outside %d string is %s\n",seqarr[i].connects,seqarr[i].hostname); } } } for (i=0;i<(*argcnt);i++) { printf("printed %d string is %s\n",seqarr[i].connects,seqarr[i].hostname); } return buff; } Str * GetStr() { //This dynamically allocates the memory and then populates Str element and returns pointer to it }
However, the printf in second for loop(one in red) gives following problems if *argcnt is large:
1) Some of the initial members print "seqarr[i].connects" correctly but junk values in "seqarr[i].hostname".
2) The program gives a segmentation fault if the count is very large.
For example, if count is 3000, for first 45-50 times, seqarr[i].connects is printed correctly but "seqarr[i].hostname" prints junk.
And after printing some first 2950 times, I get a segmentation fault.
I suspect these could be due to clean up issues.
Please let me know why am I getting these errors and how do I correct them?



LinkBack URL
About LinkBacks


