Windows和Linux之间的运行时区别是什么?

时间:2012-12-02 12:20:19

标签: cross-platform

最近我尝试了Qt让我的代码跨平台。我在Qt for Windows和Qt for Linux下编译了相同的代码。但是,似乎我的程序在Windows下正常运行但在Linux中崩溃(随机)。我很难弄清楚它在Linux上崩溃的原因。也许知道Windows和Linux之间的区别是一个好的开始?或者Windows可能会有一些防错机制?

更新 经过一些工作后,我发现这是ceil()函数崩溃程序的结果。

void setPedestriansByRealCo(int &_x,int &_y,myVector &v)
{
    int _row = 0,_colm = 0;
    boost::tuples::tie(_row,_colm) = mathOp::countRowAndColumn(_x,_y);
    setPedestriansByRowColumn(_row,_colm,v);
}

boost::tuples::tuple<int,int> countRowAndColumn(int realX,int realY)
{
    return boost::tuples::make_tuple(
                ceil((float)realY / gridWidth),
                ceil((float)realX / gridWidth)
                );
}

...

for(int i = 0; i < (int)_srcCurrentPointSet.size(); ++i) {
    int _areaRow,_areaColm;
    boost::tuples::tie(_areaRow,_areaColm) = judgePointArea(
                       _srcCurrentPointSet[i],
                       boost::tuples::make_tuple(32,24)); //use the result of countROwAndColumn
    areaPointsCurr[_areaRow * singleAreaColm + _areaColm].push_back(_srcCurrentPointSet[i]);   //<---SIGSEGV
}

如果countRowAndColumn的输入为(181,715),则_srcCurrentPointSet中的输出将为&lt; 18,72&gt;,这将导致Linux中for循环中的SIGSEGV(字段为128 * 72)。

0 个答案:

没有答案