Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29235 Discussions

"FORRTL: SEVERE (157): PROGRAM EXCEPTION - ACCESS VIOLATION" ERROR

Ashley_Weinstein
Beginner
1,214 Views
I am getting this error in one of my Fortran to C++ interfaces. Any ideas based on the declarations and interface code posted in the attached file?

0 Kudos
6 Replies
IanH
Honored Contributor III
1,214 Views
The "default" calling convention on the C side is to pass by value. Fortran's default for BIND(C) is pass by reference (pass a pointer to the variable).

Your C routine has a whole heap of int parameters being passed by value. To change the Fortran side to match the C side you then need a whole heap of VALUE attributes on the integer arguments in the interface body (note that the float/REAL argument is a pointer in the C declaration, so things match for that one).

INTEGER(C_INT), VALUE :: NBOX

etc...

(It's important to understand this aspect of calling C - if its not clear then ask more questions/do some background searches yourself.)
0 Kudos
Ashley_Weinstein
Beginner
1,214 Views
Thanks Ian. I'll make a note of the default calling convention on C side.

So by default C receives variables from Fortran and passes variables to Fortran by value while by default Fortran will receive and pass variables by reference.

Are REAL/float variable declarations always pointers in C?
0 Kudos
TimP
Honored Contributor III
1,214 Views
iso_c_binding in ifort works the same as in public postings. The default on the Fortran side is to pass a pointer value, so it looks like by reference on the C side, in fact ought to work with the C++ reference extension of extern "C". To receive a value on the C side, you add the value specifier on the Fortran side. It's the same with integer or real.
0 Kudos
Ashley_Weinstein
Beginner
1,214 Views
Hi Tim, what do you mean that the binding works the same as in "public postings"?
0 Kudos
TimP
Honored Contributor III
1,214 Views
There are several good articles on iso_c_binding you will find in a browser search. Any article about standard Fortran is good.
0 Kudos
Ashley_Weinstein
Beginner
1,214 Views
Thanks. I've been reading up a bit online as I code.
0 Kudos
Reply