Prozess zurückgegeben 255 (0xff) - code-Blöcke
Ich weiß nicht, wo mein problem ist. Ich habe versucht, den code zu kompilieren einmal und es funktionierte. Allerdings habe ich kopiert es in ein neues Projekt, um es zu ändern, nur die Farbe oder die Zeit zu warten, und es funktioniert einfach in das erste Programm.
Was ist falsch? Ich fühle mich wirklich frustriert.
Mit diesem code möchte ich die Grafik der Sinus-Funktion.
Hier ist mein code:
#include <stdio.h>
# include <SDL.h>
# include <math.h>
# define PI 3.141592
# define SCREEN_WIDTH 640
# define SCREEN_HEIGHT 480
int main(int argc, char **argv){
int x,y;
double fx,angulo;
// Uint8* posicion;
Uint32 color;
SDL_Window*win = SDL_CreateWindow("y=sin(x)", 100,100, 640, 480, 0);
// SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION,"info", "Window creada",win);
SDL_Renderer*ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
/* Create surface */
SDL_Surface*surface = SDL_CreateRGBSurface(0,SCREEN_WIDTH,SCREEN_HEIGHT,0,32,0,0,0);
//get the pixels
Uint32*pixels = (Uint32*)surface-> pixels;
/* Lock the surface */
SDL_LockSurface(surface);
color = SDL_MapRGB(surface-> format, 255, 0, 0);
for(x=0;x<360;x++){
angulo=x*PI/180;
fx=240+50*sin(angulo);
y=round(fx);
pixels[ ( y* surface-> w ) + x ] = color;
}
/* Unlock the surface */
SDL_UnlockSurface(surface);
//imprescindible
SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, surface);
SDL_RenderCopy(ren,tex,NULL,NULL);
SDL_RenderPresent(ren);
SDL_Delay(1000);
return 0;
}
- Also, was genau nicht funktioniert?
- Die IDE version benutzt du und auf welcher Plattform und Architekten ist Ihre Maschine?
- Code::blocks 13.12
- es erscheint einfach "code.exe aufgehört zu arbeiten" und dann auf "Prozess zurückgegeben 255 (0xff) - code-Blöcke"
- Der code enthält keine überprüfung, um zu sehen, wenn diese Funktionen Fehler zurück. Sie können nicht einfach annehmen, dass die Dinge funktionieren-Sie prüfen die Rückgabewerte der Funktionen, die Sie aufrufen. Zum Beispiel, hier ist die
SDL_CreateWindow
Dokumentation. Lesen Sie bitte, was der Rückgabewert bedeutet und wie man weitere Fehler-Informationen: wiki.libsdl.org/SDL_CreateWindow - Ich arbeite in win7 64bit und arbeite ich in VS2013. Ich habe meine Lösung für die entsprechende "include" - Verzeichnisse für include-Dateien und statische libs, die ich auch kopiert die dll-Datei in meinem Projekte-Verzeichnis, wo die ausführbare Datei generiert wird. Ich bin in der Lage, erfolgreich zu kompilieren und zu bauen, aber wenn ich diese ausführe. Ich bin immer ein crash auf dieser code-Zeile: Uint32 Pixel = (Uint32*)Oberfläche->Pixel, bekomme ich eine unbehandelte Ausnahme eine Zugriffsverletzung. Und in meinem debugger den Zeiger an die Oberfläche ist NULL oder leer!!! Wenn ich trat durch SDL_CreateRGBSurface(...) ist null zurückgeben!
- Verwenden Sie den debugger, um zu sehen, welche Zeile das problem passiert auf der
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach Unordnung mit Ihren source-code, den ich verändert es ein bisschen und das ist, was ich kam mit, und ich bekam es zum kompilieren und ausführen der Rückkehr keine Fehler aus beenden von main(). Stellen Sie sicher, dass Ihr Aktuelles Projekt oder Ihre Lösung ist auf den entsprechenden include-Dateien für die include-Verzeichnisse und statische Bibliotheksdateien für dieses SDL-Bibliothek und auch stellen Sie sicher, dass Sie die dll in das gleiche Verzeichnis wie die ausführbare Datei befindet sich für dieses Projekt. Auch stellen Sie sicher, dass Sie den richtigen zu bauen, um es entweder für x86 oder 64bit.
Gab es nur ein paar änderungen habe ich gemacht, Die Erste ist, die ich lieber verwenden const-Werte für die globals im Gegensatz zu #DEFINIERT. Die zweite ist eine variable, die deklariert ist, Initialisiere ich Sie alle auf einen gültigen Wert 0 oder null-Zustand. Ich wenn Sie nicht die Möglichkeit haben, mit nullptr für Hinweise, die Sie noch immer verwenden kann 0 oder NULL, aber nullptr ist bevorzugt! Auf diese Weise alle Ihre Zeiger sind nicht eingestellt oder verweist auf alles, was im Speicher.
Die zweite änderung, die ich machte, waren die wenigen casting-Aufrufe, die Sie hatte!!! Statt dies zu tun:
Ich dies anstelle:
Wenn Sie nicht die Möglichkeit haben, mit static_cast<>(), dynamic_cast<>(), reinterprest_cast<>() dann können Sie weiterhin die Umwandlung von einem Datentyp in einen anderen in der Weise, die Sie tun. Ich mag die Methode des Gießens bleibe ich aus zwei Gründen, es ist sicherer und sauberer code für das Lesen, und die andere Benutzer und sogar Sie selbst, wenn Sie zurück, um es leicht erkennen können, welche Art casting Sie mit!
Als für Ihre Fehler im code es war nicht bis ich alle Hinweise, die Sie waren zu deklarieren, um ein nullptr zuerst vor dem Aufruf der entsprechenden Funktionen und in Ihrem
SDL_CreateRGBSurface () - Aufruf haben Sie:
Sollte dies:
Was war passiert ist, waren Sie Einstellung Ihre Bit-Tiefe auf 0, dann R Farbe Maske 32, die für einen int ist nicht richtig definiert, da die Bitmasken verwenden Sie hex-Werte und nicht interger oder vorzeichenlose Werte.
Hier ist ein link auf die Dokumentation zu dieser Funktion: SDL::CreateRGBSurface
Als für in der Lage sein, um erfolgreich zu kompilieren, verknüpfen und bauen, hängt von Ihrem Betriebssystem, IDE-und wie Sie Ihr Projekt /die Lösung konfigurierten Einstellungen für diese Bibliothek!
Ich hoffe, dies hilft Ihnen! 🙂