glutBitmapString访问冲突

| (作业系统:Windows 7,编译器:Visual Studio 2010 C ++编译器) 我有一个正确工作的OpenGL程序,该程序绘制了一些球体和模型,应用了一些着色器等。等等。 现在,我认为添加一些文本会很好,因此我在draw方法中添加了以下三行:
glColor3f(0.5f, 0.5f, 0.5f);
glRasterPos2f(0, 0);
glutBitmapString(GLUT_BITMAP_HELVETICA_12, (unsigned char*)\"some text\");
现在,这一切都使我的程序陷入了无限的“访问冲突”循环,这似乎无法解决。我什至把所有其他绘制代码都注释掉了,只输出了文本,但它仍然给出访问冲突错误,我在这里很茫然,因为似乎没有什么会影响到它。因此,有人对如何解决此问题有一些建议;))。 我可以发布所有绘图代码,但是我什至尝试了一个空项目,因此我很确定它不是其余的代码。 编辑:我尝试进一步缩小错误范围,而且glRasterPos2f似乎抛出了acces冲突(足够奇怪了)。它不在任何glBegin和glEnd调用之间,并且没有OpenGL错误。 Edit2:经过一些建议,我尝试了以下代码,我摆脱了访问冲突,但仍未显示任何文本
glColor3f(0.5f, 0.5f, 0.5f);
glRasterPos2f(0.0f, 0.0f);
std::string str(\"Hello World\");
char* p = new char[strlen(str.c_str() + 1)];
strcpy(p, str.c_str());
glutBitmapString(GLUT_BITMAP_HELVETICA_12, (const unsigned char*)p);
    
已邀请:
        
glutBitmapString
const unsigned char*
类型,而不是
unsigned char*
类型。有帮助吗?我在字符串转换方面也遇到了问题。 我发现,我没有关闭字符串,因为
unsigned char*
string
长1。这是一个片段,用于解决具有相同参数类型的另一种方法:
string fullPath = TextureManager::s_sTEXTUREFOLDER + filename;
char *filePath = new char[strlen(fullPath.c_str())+1];
strcpy(filePath,fullPath.c_str());
然后你有
char*
。     
        我最近在尝试使用glBitmapString()时遇到了相同的错误。我正在使用vs2008。我在函数调用处设置了一个断点,并进入了断点(使用freeglut_font.c)。在内部,我注意到该异常是由于未初始化而引发的。所以我在初始化函数中添加了...
char* argv[] = {\"some\",\"stuff\"};    int argc=2;
glutInit(&argc,argv);   
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(800,600);
当然,您可以在任何地方使用任何argc / argv。这以及Marnix的建议为我解决了异常错误。 请注意,我实际上并没有创建带有过剩的窗口。     
        尝试将字符串放入一个临时变量中。您必须强制转换的事实会引起危险。
glColor3f(0.5f, 0.5f, 0.5f);
glRasterPos2f(0, 0);
unsigned char* s = \"some text\";
glutBitmapString(GLUT_BITMAP_HELVETICA_12, s);
如果const不起作用,则glutBitmapString()可能正在修改字符串。     

要回复问题请先登录注册