f2c 변환기 (f2c)를 사용하여 일부 기존 Fortran 코드를 C로 변환했으며 Windows 7 (64 비트)에서 Visual Studio 10 솔루션을 만들었습니다.). 또한 내 C++ 프로그램 (내 주요 기능을 포함하는 test.cpp)을 f2c 라이브러리 (nmake를 사용하는 시스템에서 빌드 됨)와 연결해야했습니다.주 기능이 끝나면 런타임 스택 오류가 발생합니다.
이 프로그램은 실행되지만 주요 기능의 끝에 도달하면, 나는 다음과 같은 디버그 오류가 나타납니다 인해 F2C 만든 "수정"을
Stack around the variable 'qq' was corrupted
Stack around the variable 'pf' was corrupted
Stack around the variable 'ampls' was corrupted
이있을 경우 내가 궁금를 변환 된 C (포트란에서) 파일 컨버터는 이러한 모든 변수는 C 배열이기 때문에
/* Parameter adjustments */
--x1;
--xabs;
--ximag;
--xreal;
--work4;
--work3;
--work2;
--work1;
--ampls;
--pf;
--qq;
--tri;
이 조금 이상한 것, 그리고 내가 F2C 프로그램이 단순히 인덱스 0 있도록 몇 가지 포인터 연산을 수행하고 있다고 생각 배열에서 배열은 인덱스 1이됩니다. 이는 Fortran과 비슷한 방식입니다.
할당되지 않은 배열 요소에 액세스하는 변환 된 코드에 문제가있을 수 있는지 여부는 알 수 없습니다.
이 오류를 디버그하고 수정하는 가장 좋은 방법은 무엇입니까?
글쎄 포인터 연산은'[] '연산자가하는 일입니다 ... 주 함수를 게시해야하지만, 배열에 할당 된 메모리 범위를 넘어서 쓰는 것 같습니다. – Dennis
valgrind (linux only)는 일반적으로 이와 같은 상황에서 매우 유용합니다. – Brady
아마도 번역 된 프로그램이 실행될 때 유사한 출력을 생성하는 간단한 포트란 프로그램을 번역 할 수 있습니다. 간단하다면 포트란과 번역 된 소스를 게시 할 수 있어야합니다. 그냥 배열의 각 요소에 하나씩 추가하는 함수를 호출하는 프로그램이 트릭을 수행 할 것으로 짐작할 수 있습니다. –