Мне нужно заменить некоторые подпрограммы Fortran функциями C++. Поскольку литературы мало, я столкнулся с проблемой, подобной следующей.
Мой код всегда выдает ошибку:
Программа получила сигнал SIGSEGV: ошибка сегментации — неверная ссылка на память.
Это мой код на Фортране:
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
из FORTRAN. - person R Sahu   schedule 07.06.2017std::vector<int>
не является особенным в этом смысле. - person Brick   schedule 07.06.2017