运行时错误:返回值丢失

时间:2013-10-11 05:17:32

标签: c++ return runtime-error

我正在开展这个项目:https://github.com/zsteve/zebra-zmachine-interpreter 这应该是z-machine故事文件的翻译,但我还在努力。

无论如何,我遇到的错误是在ztext.cpp和ZDictionary的单元测试main.cpp中。 zChartoDictionaryZCharString()应该返回一个指向字符串/ zwords数组的指针。 它正在正确创建/计算该数组,但奇怪的是无法正确返回它...

错误发生在ztext.cpp的第499行: [code] return(outWord); [/ code] 就在这时,outWord指向一系列zwords:{15 25,28 ab}由new []分配

一旦它返回到https://github.com/zsteve/zebra-zmachine-interpreter/blob/master/zdictionary/zdictionary/main.cpp中的第42行, 返回的zword *现在指向{50 00,00 00},这不应该发生。

我花了一个小时调试整个事情,直到我发现这是它出错的地方。 所以我的问题是:在我的程序中导致此问题的原因是什么? 我怀疑它是无法匹配的new [] / delete [](这可能导致它?)或zChartoDictionaryZCharString()中的std :: vector对象。 这是代码:

在第40行的main.cpp(/zdictionary/zdictionary/main.cpp)中

// error occurs here :
// at this point : tmp == {15 25 28 ab}
zword* tmp=zChartoDictionaryZCharString(tmp_);
来自第502行的ztext.cpp(/ztext/ztext/ztext.cpp)中的

zword* zChartoDictionaryZCharString(zword* zstring)
{
// converts a normal zchar string to a dictionary zchar string
// returns a zword* to either a 2 or 3 zword array.
    std::vector<zchar> vector1=expandZChars(zstring);
    std::vector<zchar> vector2(0);
    if(zVersion<=3){
        // for versions 1 to 3, dictionary word length is 4 bytes (6 zchars)
        int done=0;
        for(int i=0; i<vector1.size() && i<6; i++, done++)
        {
            vector2.push_back(vector1[i]);
        }
        if(done<6)
        {
            for(int i=done; i<6; i++)
            {
                vector2.push_back(5);
            }
        }
        // now we need to pack them to 2x zwords.
        zword* outData=new zword[2];
        zchar* zcharArray=new zchar[vector2.size()];
        for(int i=0; i<vector2.size(); i++) zcharArray[i]=vector2[i];
        outData[0]=endianize(packZChars(zcharArray));
        outData[1]=endianize(packZChars(zcharArray+3)|128);
        delete[] zcharArray;
        vector1.clear();
        vector2.clear();
        return outData;
    }else if(zVersion>3){
        // for versions 4 and up, dictionary word length is 6 bytes (9 zchars)
        int done=0;
        for(int i=0; i<vector1.size() && i<9; i++, done++)
        {
            vector2.push_back(vector1[i]);
        }
        if(done<9)
        {
            for(int i=done; i<9; i++)
            {
                vector2.push_back(5);
            }
        }
        // now we need to pack them to 3x zwords.
        zword* outData=new zword[3];
        zchar* zcharArray=new zchar[vector2.size()];
        for(int i=0; i<vector2.size(); i++) zcharArray[i]=vector2[i];
        outData[0]=packZChars(zcharArray);
        outData[1]=packZChars(zcharArray+3);
        outData[2]=packZChars(zcharArray+6);
        outData[2]|=128;
        for(int i=0; i<3; i++) outData[i]=endianize(outData[i]);
        delete[] zcharArray;
        return outData;
    }
}

任何有关修复此问题的帮助将不胜感激。 谢谢!

0 个答案:

没有答案