Qt Segmentation Fault strtod

时间:2016-07-03 08:18:20

标签: c++ linux qt segmentation-fault

每当我尝试从C字符串(char *)解析一个数字(即float,double等)时,我会得到一个分段错误并且它非常一致。

转到实际代码:

//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"

应该提到的是,我尝试过其他功能和数据类型(即atoi,atof,strtol,strtof和& strtol)。

我检查了字符串拆分功能,它按预期工作。我可以使用" qDebug("位置:%s,%s",令牌[0],令牌this recent answer);"来打印令牌值。两个strtod()函数调用上面的两个seg错误(一起或单独)。当我从我的应用程序中删除上面两行代码时,我根本没有得到seq错误。

运行环境是我使用Buildroot和较旧的Linux内核(3.4.39)制作的自定义Linux映像。该应用程序使用Qt 4.8.4 SDK以C ++编写。我运行应用程序的设备是1主板,有一些自定义IC添加(通过USB)。我也在使用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;}

更新

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);

1 个答案:

答案 0 :(得分:0)

我做了一个非常Noobish的动作,忘了给父对象调用构造函数。

此外,我也改变了包含Q语句库目录(即#include)的include语句(即#include)。