Sponsored Content
Top Forums Programming Program received signal SIGSEGV, Segmentation fault. Post 302124362 by psrujan on Saturday 30th of June 2007 04:09:24 AM
Old 06-30-2007
segmentation fault .. atoi[argv[2])

Hi ,

I have little bit of knowledge in C++.When I run the following program its gives me segmentation error. I tried to do all the possible things by reading online but not able to figure out the error. I ran it using gdb debugger but still it stays error is somewhere near n=atoi(argv[2]);
I tried to use valgrind but still no use..
but i am not sure. Can somebody please help me in finding the error.

I am using ubuntu. g++ compiler.

my command line arguments are
./output 2 3 abc.pbm 1.2 abc2.pbm 1.3

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <time.h>

using namespace std;
#define MAX 90
#define Lwire 2       // length of the wire 2mm -- all values are for 130nm technology
#define Nwire 128     // Number of wires 128
#define Llink 0.5     // average link load .5
#define powerleakage 2032.8 // leakage power 2032.8nw
#define V 1    BIG_DYN[y]       // voltage= 1V
#define Ibias 1      // Ibias=1nA
#define K1 0.39
#define K2 .12
#define POP_SIZE 50
#define R_CO .33
#define R_MUT .1


 int pbm[MAX][MAX][MAX],pgm[MAX][MAX],dist[MAX][MAX]={0}; 
 int a=0,b=0,nodes,arg;
 //int m,n;
 double TotalDynEnergy=0,minTotalDynEnergy=0;
 char  head[4],head1[4];
 int maxd;
// int layoutnumber=0;
// int layoutminTotalDynEnergy;

/**** Dynamic Energy for each communication pattern ****/
 
 double energy( void)
{ int i,j,d;
  double powerdyn,powershtckt,powertotal,energy=0;
   
   maxd=0;
   powerdyn= ( K1 +( K2 * Lwire))* Nwire * Llink;// Dynamic power equation
         // printf("\n power dyn %f \t",powerdyn);
        //powershtckt=V*Ibias;
        // powertotal=sumlinks*(powerdyn+powerleakage+powershtckt);
       // printf("\n %f\n ",powertotal);

          for(j=0;j<b;j++)
          { for (i=0;i<a;i++)
            { 
              d=dist[j][i];    // printf("\n value of d   %d\t",d);		
             if(d > maxd)
		 maxd=d;     // max distance in the layout
             if (d!=0)
             {// Dynamic Energy for each entry in comm pattern
              energy= energy+(0.37*d)+(powerdyn*(d-1));     //  printf("\n energy %f",energy);
             } 	    
            }
           }
      //  printf("\n Dynamic energy for this pattern  is  %f \n",energy);
      // printf("pattmaxd %d ",maxd);
	  return(energy);
}
	                                                                                        
/**** Load Communication paterns ****/

void loadpatterns(int argc,char **argv,int index)
{ FILE *pbmread;
  int i,j;  


       pbmread = fopen (argv[arg],"r"); // open communication pattern file	    
      /* if (!pbmread)
           printf("\n Cannot open the Communication Pattern file ");
       else
           printf("\nCommunication Pattern with weight %s",argv[arg+1]);*/ 

      fscanf(pbmread,"%s\n%d %d\n",head,&a,&b);  //printf("\n%s\n%d  %d\n",head,a,b);

      for (j=0;j<b;j++)
        { for(i=0;i< a;i++)
             { fscanf(pbmread,"%d",&pbm[index][j][i]);  // printf("%d  ",pbm[index][j][i]);
              }
               //printf("\n");
        } 
   fclose(pbmread);
}	


/**** Distance Matrix and Total Dynamic Energy ****/

void groute(int argc,char **argv)
{
    int x1,y1,x2,y2,k,l;
    int index;
    double DynEnergy;
    float weight;
    int distance;
    int i,j;
  
   for (arg=3,index=0;arg<argc;arg+=2,index++)
    { 
      weight=atof(argv[arg+1]);
      loadpatterns(argc,argv,index); // FUNCTION Load Communication Pattern 
  
       for (j=0;j<b;j++)
       for (i=0;i<a;i++)
         { if (pbm[index][j][i]!=0)
               {for (l=0;l<m;l++)
                for (k=0;k<n;k++)
                  { if (pgm[l][k] == i)
                    { x1=l;y1=k;}
                   if (pgm[l][k]==j)
                    { x2=l;y2=k;}
                  }
                distance=(abs(y2-y1)+abs(x2-x1));// 'x+y'or manhattan distance between nodes for pbm[i][j]!=0
                dist[j][i]=distance; // Distance matrix
               }
	    if (pbm[index][j][i]==0)
	    {dist[j][i]=0;}    
          }
            /*printf("\nweight  %f ",weight);
               printf("\n\nDistance Matrix\n");
               for ( j=0;j<b;j++)
               { for ( i=0;i<a;i++)
                 printf("%d  ",dist[j][i]);
                 printf("\n");
                }*/
  DynEnergy= energy(); // FUNCTION Dynamic energy for the pattern
   TotalDynEnergy=TotalDynEnergy+DynEnergy;//Total Dynamic Energy for all patterns
   }
   
}



int main(int argc,char *argv[])
{ 
  int N_CO,N_MUT;
  
 int dim;
//m=2; n=3;
 // int ext1,ext2;
 //printf(" %d  %s  %s %s",argc,argv[1],argv[2],argv[3],argv[4]);
 int q; 
 printf("break1\n");
  m=atoi(argv[1]);
 n=atoi(argv[2]); // mxn layout
 printf("\n %d   %d",m ,n );
 dim=m*n;
  int x[dim]; 
  int POP[POP_SIZE][dim];
  float POP_DYN[POP_SIZE];
  int i,j,k,l;
  int first,second;
//  int* ptr_co;
  int t1[i];
  float t;
  int gen;
  int MAX_Gen=10;
  int layoutnumber=0;
  
  for ( i=0;i<dim;i++)
    x[i]=i;    
q=n;
printf(" q is %d",q);

/**** Initial pop ***/   
do { printf("enter loop");
  
      for(i=0;i<dim;i++)
       POP[layoutnumber][i]=x[i];
       printf("layout break1");
       
     l=0;k=0;
      for(i=0;i<dim;i++)
      {if (l==q)
        {k=k+1;l=0;}
       pgm[k][l]=x[i];   // layout of the nodes
         l++;
      }
            printf("node break/n");
//   groute(argc,argv);
  //  Dynamic Energy array
    POP_DYN[layoutnumber]=TotalDynEnergy;
       
    layoutnumber++;
     TotalDynEnergy=0;
    pskreddy
     }while((next_permutation(x,x+dim)) /*&& ( layoutnumber < POP_SIZE)*/);
}


when i run gdb it gives


#0 0xb7d3ed6c in __strtouq_internal () from /lib/tls/i686/cmov/libc.so.6
#1 0xb7d3eaff in __strtol_internal () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7d3c166 in atoi () from /lib/tls/i686/cmov/libc.so.6
#3 0x08048b26 in main (argc=2, argv=0xbfb64324) at groute.cpp:140
(gdb) up 3
#3 0x08048b26 in main (argc=2, argv=0xbfb64324) at groute.cpp:140
140 n=atoi(argv[2]); // mxn layout

Its giving error for n but not m.. i dont know why

I appreciate any help

pskr

Last edited by blowtorch; 07-01-2007 at 07:46 AM.. Reason: code tags
 

8 More Discussions You Might Find Interesting

1. Programming

Program received signal SIGABRT, Aborted.

I ran degugger in C++ and the followings are the message I got: Program received signal SIGABRT, Aborted. 0x002a57a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 (gdb) info s #0 0x002a57a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2 #1 0x002e97f5 in raise () from /lib/tls/libc.so.6... (1 Reply)
Discussion started by: napapanbkk
1 Replies

2. Programming

SIGSEGV, Segmentation fault

Here is my initiating code: #define NUM 20 static struct tab { int count; int use; } tab; int curtab = 0; int tab_create(int tab_count) { curtab++; tab.use = 1; tab.count = tab_count; kprintf("here!"); return curtab; } (2 Replies)
Discussion started by: micmac700
2 Replies

3. AIX

Received signal #11, SIGSEGV [default] on AIX 6.1

Hello, One of our customer is getting segmentation fault when he runs his shell script which invokes our executable on AIX 6.1. On AIX 5.3, there were no issues. Here is the truss output. 811242: __loadx(0x0A040000, 0xF0D3A26C, 0x00000000, 0x00000009, 0x00000000) = 0xF026E884... (0 Replies)
Discussion started by: erra_krishna
0 Replies

4. Programming

getting Segmentation Fault (core dumped) error but Program runs fine.

i am executing following program int main() { char str; FILE * fp; int i=0; ... (4 Replies)
Discussion started by: bhavesh.sapra
4 Replies

5. Programming

Program received signal: “EXC_BAD_ACCESS”?

I am making a command line program in C using XCode. When running the program, it initially does what it is supposed to do (asks me for a file path). However, when I type in a valid and existing file path, it gives me the following error: Program received signal: “EXC_BAD_ACCESS”.... (6 Replies)
Discussion started by: mdonova33
6 Replies

6. Programming

Why do I receive Program received signal SIGABRT, Aborted?

Im using gdb and when a user disconnects from my server I receive a message Program received signal SIGABRT, Aborted. 0x7ffe0304 in ?? () I was hoping someone here might have a explination for this message in gdb (26 Replies)
Discussion started by: Errigour
26 Replies

7. Programming

Segmentation fault in other systems C program

Hello everybody, I've been working on a program on my Linux box, after finished the code, i compile it with gcc -Wall option, so i can see what's wrong or unused. The Walll output shows nothing, so there are no loose ends on the program. I run the program on my system, and it works PERFECTLY.... (5 Replies)
Discussion started by: Zykl0n-B
5 Replies

8. Programming

Using gdb, ignore beginning segmentation fault until reproduce environment segmentation fault

I use a binary name (ie polo) it gets some parameter , so for debugging normally i do this : i wrote script for watchdog my app (polo) and check every second if it's not running then start it , the problem is , if my app , remain in state of segmentation fault for a while (ie 15 ... (6 Replies)
Discussion started by: pooyair
6 Replies
All times are GMT -4. The time now is 11:43 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy