please read the code below and then help me with the problem stated at the end.
I am able to print everything correctly in the printf of first for loop.
However, the printf in second for loop gives following problems if *argcnt is large:
1) Some of the initial members print "seqarr.connects" correctly but junk values in "seqarr.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.connects is printed correctly but "seqarr.hostname" prints junk.
And after printing some first 2950 times, I get a segmentation fault.
Please let me know why am I getting these errors and how do I correct them?
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;
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.
However, the printf in second for loop gives following problems if *argcnt is large:
1) Some of the initial members print "seqarr.connects" correctly but junk values in "seqarr.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.connects is printed correctly but "seqarr.hostname" prints junk.
And after printing some first 2950 times, I get a segmentation fault.
Please let me know why am I getting these errors and how do I correct them?