C 문자열 (char *)에서 숫자 (즉, 부동 소수점 등)를 구문 분석하려고 할 때마다 세그먼트 오류가 발생하고 매우 일관성이 있습니다. 실제 코드에 Qt 세그먼트 화 오류 코드
://aLocation is a C++ object with two variables double Latitude & double Longitude.
char** tokens; //Gets used in a string split function.
char* pEnd;
aLocation.setLatitude(strtod(tokens[0],&pEnd)); //tokens[0] = "26.379165"
aLocation.setLongitude(strtod(tokens[1],&pEnd)); //tokens[1] = "-80.101639"
I 대체 기능 및 데이터 유형 (즉 atoi 함수,으로 atof, strtol 함수, strtof, & strtol 함수)를 시도하는 것이 언급되어야한다.
문자열 분할 기능을 검사했으며 예상대로 작동합니다. "qDebug ("위치 : % s, % s ", 토큰 [0], 토큰 1);"를 사용하여 토큰 값을 잘 인쇄 할 수 있습니다. 두 strtod() 함수는 seg fault (함께 또는 따로)를 호출합니다. 내 응용 프로그램에서 위의 두 줄의 코드를 제거하면 seq 오류가 전혀 발생하지 않습니다.
실행 환경은 Buildroot와 이전 Linux 커널 (3.4.39)을 사용하여 만든 사용자 지정 Linux 이미지입니다. 이 응용 프로그램은 Qt 4.8.4 SDK를 사용하여 C++로 작성되었습니다. 응용 프로그램을 실행중인 장치는 USB를 통해 몇 가지 사용자 지정 IC가 추가 된 alix3d 마더 보드입니다. 나는 또한 ld-uClibc.so.0 라이브러리를 사용하고있다.
Location.h :
#ifndef LOCATION_H
#define LOCATION_H
class Location
{
public:
explicit Location();
void setLatitude(double aLat);
double getLatitude();
void setLongitude(double aLong);
double getLongitude();
private:
double latitude;
double longitude;
};
#endif // LOCATION_H
Location.cpp :
#include "location.h"
Location::Location()
{
}
void Location::setLatitude(double aLat){latitude=aLat;}
double Location::getLatitude(){return latitude;}
void Location::setLongitude(double aLong){longitude = aLong;}
double Location::getLongitude(){return longitude;}
UPDATE
Case 1: this->aLocation.setLatitude(1); ------> works (No additional code above or below)
Case 2:double aLat = (double)strtod(tokens[0], &pEnd); ---> works (No additional code below this)
Case 3: Below Code Seg faults
double aLat = (double)strtod(tokens[0], &pEnd);
this->rsuLocation.setLatitude(aLat);
[최소, 완전하며 검증 가능한 예] (http://stackoverflow.com/help/mcve)를 만들어 보여주십시오. 그 작은 (그리고 불완전한) 코드로는 실제로 아무 말도 할 수 없습니다. 예를 들어,'strtod' 호출을 개별적으로 수행하고 작동한다면, 에러는 그 호출이 아니라 다른 곳에서 발생한다는 것을 알 수 있습니다. 그렇게하면 MCVE 생성을위한 문제 코드를 좁힐 수 있습니다. 그리고 디버거에서 충돌 시도 위치를 찾아 내기 위해 노력했습니다. –
주요한 용의자는 "문자열 분할 기능"입니다. – molbdnilo
문자열 분할 기능은 매력처럼 작동합니다. 나는 그것을 얼마 동안 사용 해왔다. 또한 인쇄물을 출력하여 출력 결과를 검증했습니다. 위의 추가 정보를 추가했습니다. – user2884335