Hi, I am writing a c++ code which uses a pointer to pointer of type char*. I get a segfault while executing it.
When i replace the pointer to pointer variable with array of pointer variable it works. i.e when i use char **var i get a segfault, but when i use char *var[51] the code works as expected. as per my limited knowledge char **var and char *var[51] mean the same thing only the difference being the former does not have a limit.

The code is given below. This code basically scans a file named filename.txt and matches a line and stores the address of the IP string in pointer to pointer.
The contents of the file is
**********
user@servername:~$ cat filename.txt
order deny,allow
deny from all
allow from 1.2.3.4 9.8.7.6 22.33.44.55
**********
Code:
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char *argv[])
{
        char *requestip;
        requestip = "1.2.3.4";
        printf("%s\n", requestip);

        char *ipstring,*token;
        char **ips;
        int j,count;
        int foundline;
        foundline=0;
        count=0;

        char tmp_line[1024];
        FILE *fp = fopen("filename.txt", "r");
        if(fp == NULL)      return 1;
        while(fgets(tmp_line,1023,fp)!=0)      {
                if(strcasestr(tmp_line,"order deny,allow"))   {       foundline=1;   continue;       }
                if(foundline==1)                              {       if(strcasestr(tmp_line,"deny from all")==NULL)  return 0;       foundline++; continue;}

                if(foundline==2)        {
                        foundline++;
                        ipstring = strcasestr(tmp_line,"allow from");
                        if(ipstring != NULL)    {
                                ipstring=ipstring+11;
                                ipstring=strdup(ipstring);
                                for (j=0;;j++,ipstring=NULL)    {
                                        token = strtok(ipstring," ");
                                        if (token == NULL) break;
                                        printf("%s\n",token);
                                        ips[j] = token;
                                        count=j;
                                }
                                break;
                        }
                        else    return 0;
                }
                if(!feof(fp)) break;
        }

        exit(EXIT_SUCCESS);
}
Please let me know if i am doing anything wrong.
gcc version 4.5.2 (GCC)
OS: slackware 13

Last edited by shabbir; 20Jul2012 at 19:28.. Reason: Code blocks