C++ 基本字符串::_S_构造null无效-can';我不明白为什么?
我正在转换一些代码,以便停止使用char*,而使用std::string来避免内存泄漏和/或缓冲区过载 但是我得到了一个函数,在这里我得到了上面的错误。我真的没怎么变:C++ 基本字符串::_S_构造null无效-can';我不明白为什么?,c++,string,null,C++,String,Null,我正在转换一些代码,以便停止使用char*,而使用std::string来避免内存泄漏和/或缓冲区过载 但是我得到了一个函数,在这里我得到了上面的错误。我真的没怎么变: GuiText::GuiText(std::string t, int s, XeColor c) { origText = NULL; text = NULL; size = s; color = c; alpha = c.a; style = FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE;
GuiText::GuiText(std::string t, int s, XeColor c) {
origText = NULL;
text = NULL;
size = s;
color = c;
alpha = c.a;
style = FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE;
maxWidth = 0;
wrap = false;
textDynNum = 0;
textScroll = SCROLL_NONE;
textScrollPos = 0;
textScrollInitialDelay = TEXT_SCROLL_INITIAL_DELAY;
textScrollDelay = TEXT_SCROLL_DELAY;
alignmentHor = ALIGN_CENTRE;
alignmentVert = ALIGN_MIDDLE;
if (!t.empty()) {
origText = strdup(t.c_str());
text = charToWideChar(gettext(t.c_str()));
}
for (int i = 0; i < 20; i++)
textDyn[i] = NULL;
}
GuiText::GuiText(std::string t,int s,xec){
origText=NULL;
text=NULL;
尺寸=s;
颜色=c;
α=c.a;
样式=FTGX_对齐_中心| FTGX_对齐_中间;
最大宽度=0;
wrap=false;
textDynNum=0;
textcroll=滚动\无;
textScrollPos=0;
textScrollInitialDelay=文本滚动初始延迟;
TEXT滚动延迟=TEXT\u滚动延迟;
对准HOR=对准中心;
alignmentVert=对齐\中间;
如果(!t.empty()){
origText=strdup(t.c_str());
text=charToWideChar(gettext(t.c_str());
}
对于(int i=0;i<20;i++)
textDyn[i]=NULL;
}
所有代码都在这里
所有这些都是daisy,因为我有很多GuitText实例,但是当我在第59行和gui.h中使用const char*对函数进行注释以使我的代码使用正确的函数时,我得到了上面的错误。。我不明白为什么
如何使用它的示例:
有什么想法吗?我已经转换了所有gui_text.cpp,但还是有相同的错误,所以最好尝试找出问题所在并从那里着手
希望你能帮助一个新手;-) 我假设以下两行正在尝试初始化字符串:
origText = NULL;
text = NULL;
应该1)在初始值设定项列表中初始化,2)如果为空,则不需要,3)无效(不能将字符串初始化为NULL
)
不能用空指针初始化
std::string
。所以我必须设置t?但是当我使用函数时,我不是这样做吗?或者我应该添加if(t.empty()){t=”“;}?您不能将空指针传递到函数中。函数内部已经太晚了。所以在使用函数之前,我必须检查它是否为null?在某些地方,您正在执行类似于吉他文本(null,…)的操作代码>。这用于调用GuiText(const char*,…)
重载,检查指针是否为空。但是现在您已经删除了这个重载,同样的代码调用了GuiText(string(NULL),…)
。失败的部分是string(NULL)
部分:执行根本不会进入GuiText
构造函数,因此在构造函数中所做的任何事情都不会有帮助。您必须首先修复调用代码,使其不通过NULL
。您的调试器应该能够轻松找到有问题的代码。origText是const char,而文本是wchar_t(来自gui.h)。const char
或const char*
?在任何一种情况下,这都会在以后向您介绍另一个bug。如果您使用NULL
而不是”
调用构造函数,您也会遇到该错误。@siz我猜您的意思是分别使用const char*
和wchar\u t*
,否则不应将它们设置为NULL
(对于指针,您应该使用nullptr
)是的,我做了:)使用*而不使用最小标记显然会使文本倾斜D
GuiText::GuiText(std::string t, int s, XeColor c) :
origText(t),
size(s),
color(c),
alpha(c.a),
style(FTGX_JUSTIFY_CENTER | FTGX_ALIGN_MIDDLE),
// etc
{
// etc
}