分段错误std :: vector <std :: string>

时间:2019-10-02 01:15:35

标签: c++ vector tcp

我编写了一个返回向量的函数,并在其他函数中调用它,在某些函数中,它运行良好,但在某些情况下,它引发了Segmentation错误。 这是我的functionA,它返回一个向量

std::vector<std::string> functionA(std::vector<std::string>  l){
    ...

        char *list_inorder;
        int nnn = sprintf(list_inorder,"%-5d%-35s%-20s%-8s\n",(i),(s.at(1)).c_str(),(s.at(2)).c_str(), (s.at(0)).c_str());
        ...
    }
    return result;
}

这是我在其他函数中调用它的方式,我使用相同的方法来调用它,但是有些可以工作而有些不能。

std::vector<std::string> vectorA=functionA(vectorB);

1 个答案:

答案 0 :(得分:1)

list_inorder之前,您永远不会将sprintf指向任何东西。

这意味着未定义的行为。未定义的行为可能会导致间歇性崩溃。

由于您在其他任何地方都使用流,为什么不使用流而不是sprintf?来自记忆ostringstream,但Google会比我的记忆提供更好的答案...

一个简单的解决方法是将char *list_inorder;更改为char list_inorder[50];(假设50个字符足以容纳您的字符串)-这不是理想的选择,使用流会更好。