c++ - 变量 'temp' 周围的堆栈已损坏

标签 c++ exception stack-corruption

我正在尝试将包含多个由空格分隔的值的 std::string 转换为 vector 对象。我让它工作(意味着调试器在算法结束时在 vector 中显示正确的值),但是我遇到了一个我以前从未见过的异常​​。异常(exception)情况如下:

Exception I am getting.

我以前从未见过这种情况,我已经研究了一个小时是什么导致了这种情况,但我仍然不明白。

导致异常的我的算法如下:

vector<BYTE> ConvertStringOfValuesToVectorOfBytes(std::string valStr)
{
    vector<string> vectorOfValues = split(valStr, ' '); //split string into vector of strings (works)
    vector<BYTE> Hex;
    vector<const char*> vectOfCStrings;

    for(int i = 0; i < vectorOfValues.size(); i++)
    {
        const char* temp = vectorOfValues[i].c_str();
        vectOfCStrings.push_back(temp);
    }

    //now we have a vector of c strings...

    for(int i = 0; i < vectOfCStrings.size(); i++)
    {       
        char temp = 0;
        sscanf(vectOfCStrings[i], "%x", &temp);
        Hex.push_back(temp);
    }

    return Hex;

} //<-- debugger gets to here and on the next step causes the exception

我不知道如何解决这个问题。正如我所说,算法在我得到正确结果的意义上“有效”,我只需要清除异常。我该如何解决这个问题?

最佳答案

这条线不对:

sscanf(vectOfCStrings[i], "%x", &temp);

%x 格式用于int,而不是char

您正在获取堆栈损坏,因为 sscanf 需要一个 int 的地址。它会尝试使用您传递的能够容纳 int 的地址。它显然使用了比有效内存更多的内存。

你需要的是:

for(int i = 0; i < vectOfCStrings.size(); i++)
{       
    int temp = 0;
    sscanf(vectOfCStrings[i], "%x", &temp);
    Hex.push_back(static_cast<char>(temp));
}

关于c++ - 变量 'temp' 周围的堆栈已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24942514/

相关文章:

java - 如何在 Java 中记录异常?

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

c++ - Boost 函数:存储 boost::bind 返回的任何函数?

c++ - 无法设置用户可以输入的数字范围

c++ - 如何使用 CMake 测试 C++ 应用程序没有内存错误?

c++ - boost spirit x3 变体和 std::pair

java - 为什么我可以 "fake"Java 异常的堆栈跟踪?

c++ - 调试堆栈值损坏的好方法

c++ - 函数声明的数组大小导致堆栈损坏,但干净的编译?

c - 运行时检查失败 #2 - 变量 'tempID' 周围的堆栈已损坏