Error: (with `import segfaults`)
free(): invalid pointer
Traceback (most recent call last)
/home/runner/libmtg/src/libmtg/cards.nim(119) test1
SIGABRT: Abnormal termination.
Aborted (core dumped)
Error: execution of an external program failed:
'/home/runner/libmtg/tests/test1'
Tip: 5 messages have been suppressed, use --verbose to show them.
tools.nim(36) doCmd
Error: Execution failed with exit code 1
... Command: /home/runner/libmtg/nimble-env/bin/nim c
--noNimblePath -d:NimblePkgVersion=0.1.0 --hints:off -r --path:.
/home/runner/libmtg/tests/test1
Run
Things to note: The trace back line num is wrong, idk why but segfaults usually
get it wrong. How do I fix this?
Nim code:
proc load*(cs: var CardSet) =
let lib = TrackedLibHandle(loadLib(cs.sourcePath))
cs.lib = lib
block:
let loadProc = cast[CardSetLoadProc](lib.checkedSymAddr("load"))
let cards = loadProc()
for key, value in cards:
cs.cards[key] = Card()
var vvalue = value
vvalue.source = addr cs
echo vvalue.eventHandle
if vvalue.eventHandle != "":
let name = cstring(vvalue.eventHandle)
let prc = block:
echo 0
let p = lib.checkedSymAddr(name) # Error
echo 1
cast[EventHandleProc](p)
echo "Inbetween"
vvalue.eventHandleProc = prc
if vvalue.statelessEventHandle != "":
let name = cstring(vvalue.statelessEventHandle)
let prc = cast[EventHandleProc](lib.checkedSymAddr(name))
vvalue.statelessEventHandleProc = prc
cs.cards[key][] = vvalue # Assign ref
Run