LinuxQuestions.org
Review your favorite Linux distribution.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices


Reply
  Search this Thread
Old 06-30-2007, 02:05 AM   #1
psrujan
LQ Newbie
 
Registered: Jun 2007
Posts: 0

Rep: Reputation: 0
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 suing gdb debugger but still it stays error is somewhere near n=atoi(argv[2]);
but i am not sure. Can somebdy please help me in finding the error.

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


#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 0xb7d9bd6c in __strtouq_internal () from /lib/tls/i686/cmov/libc.so.6
#1 0xb7d9baff in __strtol_internal () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7d99166 in atoi () from /lib/tls/i686/cmov/libc.so.6
#3 0x08048b26 in main (argc=2, argv=0xbf8c2ac4) at groute.cpp:139
(gdb) up 3
#3 0x08048b26 in main (argc=2, argv=0xbf8c2ac4) at groute.cpp:139
139 m=atoi(argv[1]);n=atoi(argv[2]); // mxn layout
Current language: auto; currently c++


I appreciate any help

pskr
 
Old 07-01-2007, 11:32 AM   #2
paulsm4
LQ Guru
 
Registered: Mar 2004
Distribution: SusE 8.2
Posts: 5,863
Blog Entries: 1

Rep: Reputation: Disabled
Hi -

For starters:

a) Make sure you're executing your program with at least two arguments (e.g. "myprog x y")

b) Modify your code to check for "if (argc < 3) error _exit ()"


Your traceback shows "argc=2" (meaning the last element is "argv[1]"). In this case, "argv[2]" is undefined, hence the segmentation violation.

'Hope that helps .. PSM
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
Segmentation Fault stefaandk Linux - General 2 09-04-2006 07:10 AM
What does 'segmentation fault' mean? Unforgiven79 Linux - Networking 1 08-29-2006 06:43 PM
yast segmentation fault, system freezing - nvidia driver at fault? BaltikaTroika SUSE / openSUSE 2 12-02-2005 09:34 AM
Segmentation Fault Last Attacker Programming 4 07-12-2005 06:03 PM
Segmentation Fault live2 Linux - General 6 03-02-2003 08:36 PM

LinuxQuestions.org > Forums > Non-*NIX Forums > Programming

All times are GMT -5. The time now is 11:41 AM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration