I am working on following code snippet and am having problems stated below. Please help me:
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
}
I am able to print everything correctly in the printf of first for loop.(one in Green)
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?