954,157 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

unix/C++ segmentation fault

hi there. i am new to C++ AND unix. this assignment that i have is really really easy, but the specifics of C++ and getting around in Unix is making it really hard and time consuming. i have a really small program that should be working, but i am getting the wrong output AND at the end of the output i get a Segmentation fault.

i have a function called series that is declared and works fine. i have inserted a cout<< to check that the function is working right. but i am still getting the wrong output AND this error. am i doing something illegal? using the function result as the array index? i know i am not telling you much about the code, i am just wondering if there are any GLARING unix or C++ no-nos that anyone sees.

int main (){
   const int MAX_NUM = 60;

   const int MAX_CALLS = 41;

   int num_calls [MAX_CALLS];
   
   int k = 0;

   for(int i=1; i<=MAX_NUM; i++){
      num_calls[i] = 0;
      cout<< series(i) <<endl;
      if ((series (i)) < MAX_CALLS){
        num_calls[series (i)]++;
      }
      else{ 
        k++;
      }
   }
   
   for(int l=1; l<MAX_CALLS; l++){
      cout<< l << "       " << num_calls[l] <<endl;
   }
   
   cout<< "and " << k << "numbers have series length greater than 40" <<endl;
}


thanks
crq

crq
Newbie Poster
24 posts since Jan 2005
Reputation Points: 10
Solved Threads: 0
 

Hi,

First, and this is a style thing... I hate it when people place the brace { on the same line as the expression... just does not look nice to me.

Adjusted:

int main ()
{
   const int MAX_NUM = 60;

   const int MAX_CALLS = 41;

   int num_calls [MAX_CALLS];
   
   int k = 0;

   for(int i=1; i<=MAX_NUM; i++)
         {
         num_calls[i] = 0;
         cout<< series(i) <<endl;
         if ((series (i)) < MAX_CALLS)
             {
             num_calls[series (i)]++;
             }
         else
             { 
             k++;
             }
         }
   
   for(int l=1; l<MAX_CALLS; l++)
         {
         cout<< l << "       " << num_calls[l] <<endl;
         }
   
     cout<< "and " << k << "numbers have series length greater than 40" <<endl;
}

I notice that you declare main() to be of type INT, and you do not return any number to the OS. I wonder if that is hanging you up.

I would have tried, but you didn't bring along your whole program, and I wasn't about to code it further. I couldn't compile because I had no idea what series is, and at 11:30pm, I am not to creative.

Christian

kc0arf
Posting Virtuoso
Team Colleague
1,937 posts since Mar 2004
Reputation Points: 121
Solved Threads: 57
 

THANKS for the style tips. i agree with you. i like lots of spacing in my coding. however, i have been beaten over the head with doing it the exact opposite ....

for(int i=1; i<MAX_CALLS; i++){ h[i]=0} ....
...........

.......

that stuff makes me crazy, but it seems to be the going style where i am. anything else is a bit "novice" or something ... silly, though it may be.

i think i have figured it out, though. i had some uninitialized array stuff that was making my code not work ... and yes i need to check on the number part. either i left it off when i copied and pasted ... or i lost it somewhere in my coding. i am so new at unix, that i don't know how to go to my file, and open it in the editior. all i know how to do is VIEW the file, copy it. then open a text editor window and paste it in there EVERY time i want to make a change after i compile and run ... ARRRRGGGHHH!!

thanks, though.
crq

crq
Newbie Poster
24 posts since Jan 2005
Reputation Points: 10
Solved Threads: 0
 

>I hate it when people place the brace { on the same line as the expression
Get over it. Style issues are a matter of opinion, and you shouldn't push your opinions on other people.

>I wonder if that is hanging you up.
That's legal C++. 0 will be returned by default if the compiler supports that feature from the standard. Of course, if Turbo C++ v.old_as_dirt is the OP's compiler, it's undefined behavior.

>cout<< series(i) <

Narue
Bad Cop
Administrator
15,460 posts since Sep 2004
Reputation Points: 6,464
Solved Threads: 1,401
 

In the unix that I used last semester in school the editor was called "pico" just type that on the command line and the text editor comes up. I don't know if that is standard unix or if it was on the server that I was using but you can always give it a shot.

sykobag
Newbie Poster
3 posts since Jan 2005
Reputation Points: 10
Solved Threads: 0
 

thanks for replying!

i actually found the problem ... and it was a goof-up silly mistake. i was doing things in an array element that hadn't been initalized. i am still in java mode it seems (elements of int arrays are by default initalized to 0). somehow that was producing the segmentation fault. i still don't know what that term means, but it turned out to be something silly. i am so unfamiliar with C++ and with Unix that i was sure my mistake was the result of something that i wouldn't know to do.

oh, series is a function. was declared above. i had tested it and i had the problem isolated to 2 lines because of the cout<< calls that i had going.

thanks for the help .. i am sure i will need more in the coming weeks.

thanks
crq

crq
Newbie Poster
24 posts since Jan 2005
Reputation Points: 10
Solved Threads: 0
 
In the unix that I used last semester in school the editor was called "pico" just type that on the command line and the text editor comes up. I don't know if that is standard unix or if it was on the server that I was using but you can always give it a shot.


hey, sykobag,

i am using pico too. i type pico and a blank window comes up. the problem that i have is this ... when i quit a session, save my file and want to come back to it. if i log back on and type pico, i get a blank editor. how do i call pico for the file that i want to edit instead of calling a blank window each time?

thanks
crq

crq
Newbie Poster
24 posts since Jan 2005
Reputation Points: 10
Solved Threads: 0
 

hey, sykobag,

i am using pico too. i type pico and a blank window comes up. the problem that i have is this ... when i quit a session, save my file and want to come back to it. if i log back on and type pico, i get a blank editor. how do i call pico for the file that i want to edit instead of calling a blank window each time?

thanks crq

at the bottom of the pico window there should be a load from file or something its been a while since i used it but it will load from a file all of the text you edited before

sykobag
Newbie Poster
3 posts since Jan 2005
Reputation Points: 10
Solved Threads: 0
 
at the bottom of the pico window there should be a load from file or something its been a while since i used it but it will load from a file all of the text you edited before

SUPER!! i will try that. it would be a real time saver. i have been copying and pasting and opening and closing ... a real pain.

THANKS!

crq

crq
Newbie Poster
24 posts since Jan 2005
Reputation Points: 10
Solved Threads: 0
 

if you're opening pico from a command line, couldn't you just type the path to the file as an argument?

pico /path/to/file.c

alc6379
Cookie... That's it
Team Colleague
2,820 posts since Dec 2003
Reputation Points: 186
Solved Threads: 147
 

Hello,

Alex is correct, although if pico is properly defined in the Unix path, you need to just type in "pico filename.c" or "pico filename.cpp" and away you go.

Pico is actually part of software that came from the UNiversity of Washington, and is the chosen editor for the PINE program. Pine is a smooth text based email reader program.

If pico isn't available, look at emacs. There is another one out there called joe. The default UNIX/Linux editor is vi, and well, vi is a challenge in her own right.

Christian

kc0arf
Posting Virtuoso
Team Colleague
1,937 posts since Mar 2004
Reputation Points: 121
Solved Threads: 57
 
int num_calls [MAX_CALLS];

You have an array of size 41(MAX_CALLS) BUT for(int i=1; i<=MAX_NUM; i++){
num_calls[i] = 0; Is going past the 'end of the array', hence the seg fault.

1o0oBhP
Posting Pro in Training
445 posts since Dec 2004
Reputation Points: 16
Solved Threads: 6
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You