Hi,

I can't free the memory of some pointers ( *cad2 and *res) in netman-gtk3. This is what i get:

~$ gcc main.c -o main

~$ ./main
*** Error in `./main': munmap_chunk(): invalid pointer: 0x0000000001bfdab4 ***
Aborted

See the comented lines 119 and 120 in the attached file.

The textual output of this applications shows the caracteristics of the available active wifis.

Any hints?

   Aitor.

Note: you need to install the backend of netman.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int N;
int scan_dim();
void scan_buffer (char **ptr, char *command, char *name, char *str1, char *str2);

int main(int argc, char **argv)
{
  int i;
  char **_essid, **_address, **_quality;
	
  N=scan_dim();
  
  _essid = (char**)malloc(N*sizeof(char*));
  if(!_essid) {printf("Fallo de asignación de memoria\n"); exit(-1);}
	
  _address = (char**)malloc(N*sizeof(char*));
  if(!_address) {printf("Fallo de asignación de memoria\n"); exit(-1);}

  _quality = (char**)malloc(N*sizeof(char*));
  if(!_quality) {printf("Fallo de asignación de memoria\n"); exit(-1);}
  
  scan_buffer (_essid,   "/usr/lib/netman/bin/backend 8", "ESSID:", "\"", "\"");
  scan_buffer (_quality, "/usr/lib/netman/bin/backend 8", "Quality=", "=" , "Signal level");
  scan_buffer (_address, "/usr/lib/netman/bin/backend 8", "Address:", " " , "\"");

  for(i=0; i<N; i++)
  {
	printf("%s\n", _essid[i]);
	free(_essid[i]);
  }

  for(i=0; i<N; i++)
  {
	printf("%s\n", _address[i]);
	free(_address[i]);
  }

  for(i=0; i<N; i++)
  {
	printf("%s\n", _quality[i]);
	free(_quality[i]);
  }
 
  free(_essid);	
  free(_address);
  free(_quality);
  system("rm -f output");    
  return 0;
}

void scan_buffer (char **ptr, char *command, char *name, char *str1, char *str2)
{
  FILE *fp;
  char *cad1, *cad2, *res;
  
  cad1=(char*)malloc(1024*sizeof(char));
      if(!cad1) {printf("Fallo de asignación de memoria\n"); exit(-1);}

  cad2=(char*)malloc(1024*sizeof(char));
      if(!cad2) {printf("Fallo de asignación de memoria\n"); exit(-1);}
  
  res=(char*)malloc(1024*sizeof(char));
      if(!res) {printf("Fallo de asignación de memoria\n"); exit(-1);}  
  
  fp = fopen("output", "r");
  if(!fp) exit(-1);

  int cont=0;
  while (fgets(cad1, 1024, fp))
  {
    if(strstr((char *) cad1, name))
       {
	     cad2 = strstr((char *) cad1, name);  
         res  = strstr((char *) cad2, str1);

		 if(name!="Address:")
		 {  
          int bool=0;
          int i=0;
          int n,m;
          while ((bool!=1) && (res[i]!='\0'))
			{
			 if(str2[0]==res[i])
				{
			      m=i; n=0;
				while ((bool!=1) && (str1[n]==res[m]))
						{
						  n++; m++;
						  if (n == strlen(res)) bool=1;
						}
				}
			 i++;
			}
         
          for (i=(m-n); res[i]!='\0';i++) res[i]='\0';
         }
         else res[18]='\0';

         int j=0;        
         while(j<strlen(res)) {res[j]=res[j+1]; j++;}
         res[j]='\0';

         j=1;
         while(res[strlen(res)-j]==' ') {res[strlen(res)-j]='\0'; j++;}
         
         ptr[cont] = (char*)malloc(strlen(res)*sizeof(char));
	     if(!ptr[cont]) {printf("Fallo de asignación de memoria\n"); exit(-1);}

         strcpy(ptr[cont], res);
         ptr[cont][strlen(res)]='\0';
         cont++;
       }
  }

  free(cad1);
  // free(cad2);
  // free(res);
  fclose(fp);
  return;
} 

int scan_dim ()
{
  FILE *fp, *fp1;
  char *cad1, *cad2;
  
  cad1=(char*)malloc(1024*sizeof(char));
      if(!cad1) {printf("Fallo de asignación de memoria\n"); exit(-1);}

  cad2=(char*)malloc(1024*sizeof(char));
      if(!cad2) {printf("Fallo de asignación de memoria\n"); exit(-1);}
   
  fp = popen("/usr/lib/netman/bin/backend 8", "r");
  if(!fp) exit(-1);
  
  fp1 = fopen("output", "w");
  if(!fp1) exit(-1);

  int cont=0;
  while (fgets(cad1, 1024, fp))
  {
    if(strstr((char *) cad1, "Address:"))
       {
 		 cad2 = strstr((char *) cad1, "Address:");
 		 fprintf(fp1, "%s", cad2);  
         cont++;
       }
    else if(strstr((char *) cad1, " "))
			{
			  cad2 = strstr((char *) cad1, " ");
			  fprintf(fp1, "%s", cad2);  
			} 
  }
  
  pclose(fp);
  fclose(fp1);
  return cont;
}
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to