problem with Access Violation, and I'm not sure where
Matt via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Jun 10 22:14:55 PDT 2014
On Wednesday, 11 June 2014 at 02:59:40 UTC, Matt wrote:
> I previously asked this over in the DigitalMars.D
> board(http://forum.dlang.org/thread/huftyrtbomaimuqkmkmy@forum.dlang.org#post-hrqvqlzzbkgafvjdtjnb:40forum.dlang.org),
> but it was suggested I ask it over here instead.
>
> I have the following code and, despite trying to pinpoint it
> with try-catch blocks, I keep getting an Access Violation, and
> I'm really not sure where.
>
> I'm using dub to build, but I've tried manually building as
> well, and I just get the same problem comes up.
>
> The only module in the program is as follows (with the wrapper
> modules ripped out, so it's straight calls);
>
> ---
>
> module app;
>
> // own modules
> import derelict.sdl2.sdl;
>
> // standard library modules
> import std.json;
> import std.file;
> import std.conv;
> import std.stdio;
> import std.datetime;
>
> void main (string[] args){
> DerelictSDL2.load();
> if (!DerelictSDL2.isLoaded) assert(0, "DerelictSDL2 failed to
> load!");
> SDL_Init( SDL_INIT_EVERYTHING );
>
> scope(exit) SDL_Quit();
>
> SDL_Window* window;
> JSONValue cfg;
>
> try{
> cfg = loadConfig;
>
> auto width = to!int (cfg["window"]["width"].integer);
> auto height = to!int (cfg["window"]["height"].integer);
>
> window = SDL_CreateWindow (cfg["window"]["caption"].str.ptr,
> SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width,
> height, SDL_WINDOW_SHOWN);
> }
> catch(Error e){
> writeln ("error occurred before timing variable setup");
> return;
> }
>
> // set up timing variables
> auto duration = TickDuration
> (cfg["graphics"]["ticks"].integer);
>
> auto current_tick = Clock.currAppTick;
> auto target_tick = current_tick + duration;
> auto target_margin = target_tick + (duration/2);
>
> // main loop
> try{
> int* keys;
> ubyte* numkeys;
>
> while (true){
> SDL_PumpEvents();
> numkeys = SDL_GetKeyboardState (keys);
>
> if (keys[SDL_SCANCODE_LALT] && keys[SDL_SCANCODE_F4]){
> SDL_DestroyWindow (window);
> break;
> }
>
> current_tick = Clock.currAppTick;
> if (current_tick >= target_tick){
> // this way, it will wait for the next frame, if there is
> less than half the time to the next frame left
> if (current_tick < target_margin){
> // update graphics and physics
> }
> // prep for next tick
> target_tick += duration;
> target_margin += duration;
> }
>
> }
> }
> catch(Error e){
> writeln ("error occurred during main loop");
> }
> }
>
> ---
>
> If anyone can help me with this, I would very much appreciate
> it.
Apparently, it's in another part of my code, and I was doing
something extremely silly. Ah well, live and learn.
More information about the Digitalmars-d-learn
mailing list