(win) Memory Access Violation in Release Mode

Monkey Forums/Monkey Programming/(win) Memory Access Violation in Release Mode

Shinkiro1(Posted June) [#1]
Hey guys,

I am getting a MAV in Release Mode for the Desktop Target (glfw3). No error message or line number. Debug Builds work fine, as do Html5 builds.

I have narrowed the error down to a code section using Print statements.
The problem now is that it actually works after inserting Print statements.
This leads me to believe there is an issue with memory alignment in c++ (as also suggested by Gerry Quinn here: http://www.monkey-x.com/Community/posts.php?topic=12342)

I am using just a bit of custom c++ code, don't think that's the issue:
GLFWwindow* getWindow() {
  return BBGlfwGame::GlfwGame()->GetGLFWwindow();
}

class MouseWheelInfo {
public:
  Float x;
  Float y;
  MouseWheelInfo() : x(0.0), y(0.0) {}
};
MouseWheelInfo* wheelInfo;


void scrollwheelCallback(GLFWwindow* window, double xoffset, double yoffset) {
  wheelInfo->x = Float(xoffset);
  wheelInfo->y = Float(yoffset);
}

void NativeInit() {
  GLFWwindow* window = getWindow();
  glfwSetScrollCallback(window, &scrollwheelCallback);
  wheelInfo = new MouseWheelInfo();
}

Float MouseZUnsafe() {
  if (wheelInfo != 0) {
    float z = wheelInfo->y;
    wheelInfo->y = 0.0;
    return z;
  }
  return 0.0;
}

bool SuperKey() {
  return glfwGetKey(getWindow(), GLFW_KEY_LEFT_SUPER) == GLFW_PRESS ||
         glfwGetKey(getWindow(), GLFW_KEY_RIGHT_SUPER) == GLFW_PRESS;
}

bool AltKey() {
  return glfwGetKey(getWindow(), GLFW_KEY_LEFT_ALT) == GLFW_PRESS ||
         glfwGetKey(getWindow(), GLFW_KEY_RIGHT_ALT) == GLFW_PRESS;
}

void ClipboardSet(String data) {
  glfwSetClipboardString(getWindow(), data.ToCString<char>());
}

String ClipboardGet() {
  const char* s = glfwGetClipboardString(getWindow());
  return String(s);
}

void ClipboardClear() {
  glfwSetClipboardString(getWindow(), "");
}

void SeekMusic(int ms) {
	gxtkChannel *channel = &(gxtkAudio::audio->channels[32]);
	if (channel && channel->state == 1) {
		alSourcef(channel->source, AL_SEC_OFFSET, (float)(ms / 1000.0));
	}
}


EDIT:
Also I have used the x64dbg debugger, but couldn't find out much because I can't read assembly. But when it crashes, it shows "TileObjectData" as info, which is a class in my project. Here the relevant class:
Class TileObjectData Extends Component
    Field collides:Bool
    Field look:String
    Field facing:Int = TILE_DOWN
    Field refName:String
    Field data:String

    Field type:Int = TYPE_NONE
    Const TYPE_NONE:Int = 0
    Const TYPE_SCRIPT:Int = 1
    Const TYPE_SCRIPT_REF:Int = 2
    Const TYPE_SAVEPOINT:Int = 3
    Const TYPE_SHIP:Int = 6
    Const TYPE_DOCK:Int = 7
End

Class Component Abstract
	Field entity:Entity
	Field active:Bool = True
End

Class Entity
	Field name:String
	Field attributes:StringMap<String>
	Field tags:Int

	Field position:Vec2 = New Vec2
	Field scale:Vec2 = New Vec2(1.0, 1.0)
	Field rotation:Float
	Field visible:Bool = True
End



Shinkiro1(Posted June) [#2]
I "solved" this by using the Microsoft Compiler.


Pakz(Posted June) [#3]
I had an error like this. I fixed it by changing a method into a function.