Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.08.2013, 21:28

Zugriffsverletzung bei glCreateShader(...)

Hallo Community,

ich habe heute einen relativ großen Wrapper um die Shader von OpenGL gebastelt, ihn mittlerweile auch debuggen können, und stehe nun nur noch vor einem Problem, das ich einfach nicht gelöst bekommen will:

Bei folgendem Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool VertexShader::init(const std::string& name)
{
    int compile = 0;
    m_shader = glCreateShader(GL_VERTEX_SHADER);
    std::string file = loadFile(name);
    const char* source = file.c_str();
    glShaderSource(m_shader, 1, &source, 0);
    delete[] source;
    glCompileShader(m_shader);
    glGetShaderiv(m_shader, GL_COMPILE_STATUS, &compile);
    if(compile == 0)
        return false;
    return true;
}


(m_shader ist hierbei eine MemberVariable einer Basis-Klasse, ein unsigned int, und public)

bekomme ich immer die Fehlermeldung, es liege eine Zugriffsverletzung bei der Zeile

C-/C++-Quelltext

1
m_shader = glCreateShader(GL_VERTEX_SHADER);
vor. Hat jemand von euch eine Idee, woran das liegen könnte?


IDE:
Visual Studio 2012 Professional C++


Viele, liebe Grüße,
~ EuadeLuxe ~


@Anhang:
loadFile() liest lediglich die Datei mit dem Namen name als ganzen string ein.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

29.08.2013, 21:32

Wie genau lautet die Fehlermeldung? Gibts in dem jeweiligen Thread einen gültigen OpenGL Context? Woher genau nimmst du die Funktion glCreateShader()?

3

29.08.2013, 21:35

Die Funktion glCreateShader wird in einem gültigen Kontext aufgerufen. Die Funktion nehme ich aus glew.h. Hier die komplette Fehlermeldung:

C-/C++-Quelltext

1
Unbehandelte Ausnahme bei 0x74D0C9F5 in Engine_Debug.Win32.exe: 0xC0000005: Zugriffsverletzung beim Ausführen an Position 0x00000000



Sobald diese Ausnahme auftritt, werde ich auf diese Zeile verwiesen. Ich zerbreche mir gerade den Kopf darüber, woran das liegen könnte....

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

29.08.2013, 21:41

Ok, wie ich mir schon gedacht hab, glCreateShader() ist wohl ein Nullzeiger. Ich rate mal ins Blaue und postuliere, dass du vergessen hast, GLEW, oder was auch immer für eine Library du verwendest, zu initialisieren...

5

29.08.2013, 21:51

Dot, das war ein Volltreffer: im Eifer des Gefechts hatte ich vergessen glewInit(); aufzurufen. Danke dir ^^. Jetzt gibt´s aber gleich noch ein Problem: Jetzt bekomme ich beim Aufruf von delete[] source diesen Fehler:

C-/C++-Quelltext

1
2
3
4
Debug Assertion Failed!
Program:[...]
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
[...]



ich habe schon gegoogelt, das hat mir allerdings nicht wirklich weitergeholfen.

Btw: Muss ich source überhaupt löschen? Immerhin ist es ja nur ein Zeiger auf ein von string verwaltetes Array....

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

29.08.2013, 22:01

Du musst source nicht nur nicht löschen, du darfst es nicht löschen... ;)

7

29.08.2013, 22:03

Danke dir ;).

Werbeanzeige

Ähnliche Themen