我知道這個問題以前已經問過,但是沒有看到我的問題的適當解決方案,我的問題是當我創建一個指針時一個類(PAGTexture)一切正常,但隨後,該指針作爲變量傳遞給另一個類,並且在該新類(PAGRevolutionObject)中,我從PAGTexture調用一個方法,然後引發異常。調試我意識到它實際上進入該方法,但「this」指針爲空「0x00000000」。 這是我PAGTexture的CPP:當調用該類的一個方法時,指針的類「this」變爲null C++
#include "PAGTexture.h"
PAGTexture::PAGTexture()
{}
PAGTexture::~PAGTexture()
{
}
void PAGTexture::loadTexture(char * path_img, GLuint min_filter, GLuint mag_filter)
{
int imgWidth, imgHeight;
unsigned char *image;
image = SOIL_load_image(path_img,
&imgWidth,
&imgHeight,
0,
SOIL_LOAD_RGBA);
if (imgWidth == 0) {
std::cout << "Failed to load image." << std::endl;
}
GLuint id_img;
glGenTextures(1, &id_img);
glBindTexture(GL_TEXTURE_2D, id_img);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imgWidth, imgHeight,
0, GL_RGBA, GL_UNSIGNED_BYTE, image);
glGenerateMipmap(GL_TEXTURE_2D);
ep = id_img;
id_imgs.push_back(id_img);
SOIL_free_image_data(image);
}
void PAGTexture::applyTexture(GLuint id, int pos)
{
glActiveTexture(id);
glBindTexture(GL_TEXTURE_2D, id_imgs.at(pos));
}
它變成一個空指針時,「applyTexture」之稱,因爲它試圖擺脫id_imgs.at(POS)的ID,這一個是空。
這就是我所謂的「applyTexture」部分:
GLuint t = 33984;
if (id_revol.size() != 0) {
for (int i = 0; i < id_revol.size(); i++) {
shader_used->setUniform("TexSamplerColor", i);
textures->applyTexture(t + i, id_revol.at(i));
}
}
注意紋理是不是空指針,因爲我可以從那裏獲得「applyTexture」。
這是我得到了什麼調試圖像: Image Debugging the process
我也試着設置一個數據斷點知道我的代碼的部分是該指針損壞的以下這"tutorial",但我不能設置斷點爲我的VS版本(VS2015)。老實說,我認爲我的問題是我從另一個班覆蓋記憶(我的學生很大),但即使如此我想問一下,看看有沒有我失蹤的東西。
順便說一句,我在調試模式(不是發佈)使用Visual Studio 2015。
在此先感謝您的任何答案。
EDIT1: 如這裏要求是我定義PAGTexture:
PAGTexture *texturesPack = new PAGTexture();
texturesPack->loadTexture("Textures/check.png", GL_LINEAR, GL_LINEAR);
texturesPack->loadTexture("Textures/HeadSpider.png", GL_LINEAR, GL_LINEAR);
texturesPack->loadTexture("Textures/wood.jpg", GL_LINEAR, GL_LINEAR);
objeto2->drawLowerBodySpiderAndHead(texturesPack);
最後編輯: 謝謝大家的回答,我的問題是,我是結合該指針的內聯函數,似乎你不能這樣做(仍然不知道爲什麼),無論如何,我已經學會了一些觀點,我認爲這可能是重要的,所以再次感謝:D
放在該行斷點和檢查'textures'實際上是不爲空。 –
你沒有清楚你的問題。 [你的代碼片段不能被編譯成可用的可執行文件,所以我們不能重現這個問題。](http://stackoverflow.com/help/mcve)其中一個代碼片段實際上都不包含關鍵字'this'。仍然試圖找出你的問題到底在哪裏...... – DevSolar
我剛剛檢查過,你說得對,紋理爲空,但我仍然可以輸入「applyTexture」方法,這是否合理? – JLentubbi