Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

502
Views
Works fine in C++, but runtime error in C

I have this code here ::

int f(int x, int *py, int **ppz)
{
  int y, z;
  **ppz += 1; 
   z  = **ppz;
  *py += 2;
   y = *py;
   x += 3;
   return x + y + z;
}

int main()
{
   int c, *b, **a;
   c = 4;
   b = &c;
   a = &b; 
   printf( "%d\n", f(c,b,a));
   printf( "%d\n", c);
}

(Please choose the header files accordingly)

When I run this code as a C++ program, it runs smoothly. But, when I run it as a C program, it completes its execution, prints all the values, but on the last line of the code, gives a Runtime Error. I attached a debugger, and at the end of the program(while running this code in C) on clicking Step-Over, it takes me to a min_gw file, which looks something like this::

__mingw_CRTStartup()
__mingw_CRTStartup+208: mov    %eax,%ebx
__mingw_CRTStartup+210: call   0x407fb0 <_cexit>
__mingw_CRTStartup+215: mov    %ebx,(%esp)
__mingw_CRTStartup+218: call   0x408088 <ExitProcess@4>
__mingw_CRTStartup+223: nop

What is this file?? And why does the code fail in C??

Ideone references ::

C :: http://ideone.com/sDbqnI

C++ :: http://ideone.com/Ubb71k

Thanks for any help in advance.. :)

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

All versions of C++, and C since C99, add an implicit return 0; at the end of main before falling off the end.

C89 (which is the default for most compilers) does not, so it is UB if you actually return from main by falling off the end.

Edit: In practice (assuming you are running without sanitizers), this means that you will return whatever happens to be in $eax already, i.e. the return value of the last function. Since printf usually returns a non-zero value, that is treated as failure.

over 4 years ago · Santiago Trujillo Report

0

You forgot the return statement in the end of main indicating success.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!