小编Fil*_*ppo的帖子

Lisp,cffi,let和memory

我已经构建了一些玩具C++库来快速创建一个来自Lisp的Qt窗口.我知道common-qt存在,我只是想学习如何使用cffi.

现在,我有4个绑定功能:

  • create-application:创建一个QApplication并返回一个指针
  • create-window:创建一个QMainWindow并返回一个poiner
  • show:显示指定为参数的窗口
  • exec:Qt exec函数

这是一个完美运行的lisp代码:

(defctype t-app :pointer)
(defctype t-window :pointer)

(defcfun (create-application "create_application" ) t-app)
(defcfun (exec "exec") :void (app t-app))
(defcfun (create-window-aalt "create_window_aalt") t-window)
(defcfun (show "show") :void (o t-window))

(defparameter a (create-application))
(defparameter w (create-window-aalt))
(show w)
(exec a)
Run Code Online (Sandbox Code Playgroud)

但如果我使用LET或LET*......我有内存故障!

(let* ((a (create-application)) (w (create-window-aalt)))
    (show w)
    (exec a))


CORRUPTION WARNING in SBCL pid 1312(tid 140737353860992):
Memory fault at a556508 (pc=0x7ffff659b7f1, sp=0x7ffff2bbe688)
The integrity of this image is possibly compromised.
Exiting.
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?

我正在使用SBCL:

env …
Run Code Online (Sandbox Code Playgroud)

lisp pointers sbcl let cffi

6
推荐指数
1
解决办法
641
查看次数

如何防止`jsx watch`编译交换文件?

我正在使用vim有一个编辑器.JSX编译交换/临时文件.我怎么能避免这种情况?

命令行 :

jsx --extension js --watch src/ build/
Run Code Online (Sandbox Code Playgroud)

我在stdout中看到的内容:

.helloworld.js.swp changed; rebuilding...
["helloworld"]
["helloworld"]
helloworld.js~ changed; rebuilding...
helloworld.js~ changed; rebuilding...
["helloworld"]
["helloworld"]
Run Code Online (Sandbox Code Playgroud)

谢谢.:)

reactjs react-jsx

5
推荐指数
1
解决办法
170
查看次数

标签 统计

cffi ×1

let ×1

lisp ×1

pointers ×1

react-jsx ×1

reactjs ×1

sbcl ×1