C++ 为什么不是';t SDL_QueryTexture是否为其int*参数赋值?
我的代码中的一个调整导致了一个奇怪的事件,这导致了SEGFULTS。在通过gdb运行它之后,我发现对SDL_QueryTexture的调用没有将SDL_纹理的宽度和高度值分配给传递给该方法的int指针。我调用了SDL_GetError()并打印了它,它说:“加载SHCORE.DLL失败:找不到指定的模块。”在搜索时,我听说这可能与旧版本的Windows有关。我有Windows7,但是代码是从以前开始工作的,所以我怀疑Windows是这里的问题,但是代码。我认为导致问题的代码(包括SDL_QueryTexture调用)如下所示:C++ 为什么不是';t SDL_QueryTexture是否为其int*参数赋值?,c++,sdl-2,C++,Sdl 2,我的代码中的一个调整导致了一个奇怪的事件,这导致了SEGFULTS。在通过gdb运行它之后,我发现对SDL_QueryTexture的调用没有将SDL_纹理的宽度和高度值分配给传递给该方法的int指针。我调用了SDL_GetError()并打印了它,它说:“加载SHCORE.DLL失败:找不到指定的模块。”在搜索时,我听说这可能与旧版本的Windows有关。我有Windows7,但是代码是从以前开始工作的,所以我怀疑Windows是这里的问题,但是代码。我认为导致问题的代码(包括SDL_Quer
struct TextTexture {
private:
SDL_Texture* texture;
SDL_Rect destinationrect;
int* w;
int* h;
void loadText(string s) {
SDL_Color color = {255,255,255};
SDL_Surface* textsurface = TTF_RenderText_Solid(font, s.c_str(), color);
if(textsurface == NULL) {
cout << "Could not rendertext onto surface" << endl;
}
texture = SDL_CreateTextureFromSurface(r,textsurface);
if(texture == NULL) {
cout << "Could not make texture" << SDL_GetError() << endl;
}
SDL_QueryTexture(texture, NULL, NULL, w, h);
cout << SDL_GetError() << endl;
SDL_FreeSurface(textsurface);
textsurface = NULL;
}
void textRender(int x, int y) {
destinationrect = {x,y,*w,*h};
if (SDL_RenderCopy(r,texture,NULL,&destinationrect) < 0) {
cout << "Rendercopy error" << SDL_GetError() << endl;
}
}
};
struct textTextTexture{
私人:
SDL_纹理*纹理;
SDL__Rect destinationrect;
int*w;
int*h;
无效加载文本(字符串s){
SDL_颜色={255255};
SDL_Surface*textsurface=TTF_RenderText_Solid(字体,s.c_str(),颜色);
if(textsurface==NULL){
cout代码的问题在于,您只是通过值而不是指针传递int
变量。
SDL是用C编写的,因此它不像C++那样没有传递引用。因此,为了允许SDL将变量输入到变量中,需要传递指向这些变量的指针。
您将更改这行代码:
SDL\u QueryTexture(纹理,NULL,NULL,w,h);
为此:
SDL_QueryTexture(纹理、空、空、w和h);
符号返回变量w
和h
的地址
如果您想了解C++中的指针,这里有一个链接:
w
和h
是int*
,而不是int
,OP需要更改。将w
和h
更改为普通int
s,并执行SDL\u查询结构(…,&w,&h)
。sr
来自何处?在a中编辑。