我需要用C++函数替换一些Fortran子程序。由于文献很少,我遇到了以下这个问题。
我的代码总是会抛出一个错误:
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
这是我的Fortran代码:
我的代码总是会抛出一个错误:
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
这是我的Fortran代码:
PROGRAM vector_adder
IMPLICIT NONE
INTEGER,DIMENSION(3) :: a,b,c
INTEGER :: i
!C fill vectors with values
DO i = 1,3
a(i) = i
b(i) = i
END DO
CALL ADD_VECTORS(a,b,c)
WRITE(*,'(I5,I5,I5)') (c(i),i =1,3)
STOP
END PROGRAM
一份正常工作的C代码:
void add_vectors_(int (*a)[3], int (*b)[3], int (*c)[3])
{
for(int i = 0; i<3 ; i++)
{
(*c)[i] =(*a)[i] + (*b)[i];
}
}
我希望你能提供一个类似的C++版本:
extern "C" void add_vectors_(std::vector<int> *a, std::vector<int> *b, std::vector<int> *c)
{
for(int i = 0; i<a->size() ; i++)
{
(*c)[i] =(*a)[i] + (*b)[i];
}
}
std::vector
对象进行接口交互。 - R Sahustd::vector<int>
并不特殊。 - Brick