我编写了一个返回向量的函数,并在其他函数中调用它,在某些函数中,它运行良好,但在某些情况下,它引发了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);
答案 0 :(得分:1)
在list_inorder
之前,您永远不会将sprintf
指向任何东西。
这意味着未定义的行为。未定义的行为可能会导致间歇性崩溃。
由于您在其他任何地方都使用流,为什么不使用流而不是sprintf?来自记忆ostringstream
,但Google会比我的记忆提供更好的答案...
一个简单的解决方法是将char *list_inorder;
更改为char list_inorder[50];
(假设50个字符足以容纳您的字符串)-这不是理想的选择,使用流会更好。