I get the following errors from Valgrind as the first ones which I can't understand: ==16606== Invalid write of size 8 ==16606== at 0x7EB9660: ??? (in /usr/lib/xorg/modules/drivers/i965_dri.so) ==16606== by 0x7EBCAD7: ??? (in /usr/lib/xorg/modules/drivers/i965_dri.so) ==16606== by 0x797884D: ??? (in /usr/lib/xorg/modules/drivers/i965_dri.so) ==16606== by 0x7B70B96: ??? (in /usr/lib/xorg/modules/drivers/i965_dri.so) ==16606== by 0x7B73968: ??? (in /usr/lib/xorg/modules/drivers/i965_dri.so) ==16606== by 0x7B79444: ??? (in /usr/lib/xorg/modules/drivers/i965_dri.so) ==16606== by 0x4FF4609: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0) ==16606== by 0x4FEC69E: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0) ==16606== by 0x4FF0C45: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0) ==16606== by 0x138141: textureFromText__oH9bIq9aVWxxLMPOKZa5z9bFQ (@mtextures.nim.c:344) # this is the error ==16606== by 0x13AF13: main__e8Zc9b6ypCaQRJuBLKbydsw (@mkorovan.nim.c:1377) ==16606== by 0x13C93F: NimMainModule (@mkorovan.nim.c:1912) ==16606== Address 0x7fccd34f9030 is not stack'd, malloc'd or (recently) free'd Run
In my application I have the following piece of code: import sdl2, sdl2/ttf type Texture* = ptr TextureObj TextureObj = object data*: TexturePtr # from sdl2 lib width*, height*: int proc textureFromText*(r: RendererPtr; font: FontPtr, text: string, fg: tuple[r,g,b,a: int]): Texture = let surf: SurfacePtr = font.renderTextSolid( text.cstring, (fg.r.uint8,fg.g.uint8,fg.b.uint8,fg.a.uint8) ) let texture: TexturePtr = r.createTextureFromSurface(surf) # problem line result = cast[Texture](alloc0(sizeof(Texture))) result.data = texture result.width = surf.w result.height = surf.h freeSurface(surf) Run which compiles to N_LIB_PRIVATE N_NIMCALL(tyObject_TextureObj__s9blP5sVYLYsZltL4Bb1yzA*, textureFromText__oH9bIq9aVWxxLMPOKZa5z9bFQ)(tyObject_RendererPtrcolonObjectType___RZ5I89cPVLRdJchBQYVCSfg* r, tyObject_FontPtrcolonObjectType___aRlNW02x3t1nWe9bTYP3kng* font, NimStringV2 text, tyTuple__FtZxsWeKlOo83uVL9c4OOmg* fg) { tyObject_TextureObj__s9blP5sVYLYsZltL4Bb1yzA* result; tyObject_Surface__sOGmuBWrSv9c4mZ0oaW1R1w* surf; tyTuple__Xo4YhcsfLAmbGDNu1Obfcw T1_; tyObject_TexturePtrcolonObjectType___6n0oqQPDsaMFNhtiJ29bOXw* texture; void* T2_; nimfr_("textureFromText", "/home/grfork/playground/nim/korovan/src/textures.nim"); result = (tyObject_TextureObj__s9blP5sVYLYsZltL4Bb1yzA*)0; nimln_(31, "/home/grfork/playground/nim/korovan/src/textures.nim"); T1_.Field0 = ((NU8) ((*fg).Field0)); T1_.Field1 = ((NU8) ((*fg).Field1)); T1_.Field2 = ((NU8) ((*fg).Field2)); T1_.Field3 = ((NU8) ((*fg).Field3)); surf = Dl_16561790_(font, nimToCStringConv(text), T1_); nimln_(38, "/home/grfork/playground/nim/korovan/src/textures.nim"); texture = Dl_16525674_(r, surf); // problem line nimln_(42, "/home/grfork/playground/nim/korovan/src/textures.nim"); T2_ = (void*)0; T2_ = alloc0Impl__WrVG9abV9chlTLqkiXYLKwUg_3(((NI) 8)); result = ((tyObject_TextureObj__s9blP5sVYLYsZltL4Bb1yzA*) (T2_)); nimln_(43, "/home/grfork/playground/nim/korovan/src/textures.nim"); (*result).data = texture; nimln_(44, "/home/grfork/playground/nim/korovan/src/textures.nim"); (*result).width = ((NI) ((*surf).w)); nimln_(45, "/home/grfork/playground/nim/korovan/src/textures.nim"); (*result).height = ((NI) ((*surf).h)); nimln_(46, "/home/grfork/playground/nim/korovan/src/textures.nim"); Dl_16525938_(surf); popFrame(); return result; } Run and the signature from SDL2 library for `createTextureFromSurface` is proc createTextureFromSurface*(renderer: RendererPtr; surface: SurfacePtr): TexturePtr {. importc: "SDL_CreateTextureFromSurface".} Run In application code `textureFromText` is called in a loop many times a second and its resulting object is destroyed every time with the `destroy` proc: proc destroy*(texture: var Texture) = if texture.isNil: return if texture.data != nil: destroy texture.data texture.data = nil dealloc texture texture = nil Run and removing it doesn't make a difference. I'm just learning to use Valgrind and I'm not sure I understand what is going on. How does this error occur?