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

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

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

>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) <<endl;
What is series? Is it a type? Is it a function? Most likely your problem is in the code that you neglected to post.

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.

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

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

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

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

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

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

int num_calls [MAX_CALLS];

You have an array of size 41(MAX_CALLS) BUT

for(int i=1; i<=<b>MAX_NUM</b>; i++){
num_calls = 0;

Is going past the 'end of the array', hence the seg fault.

This article has been dead for over six months. Start a new discussion instead.