- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在下面这个 hello world C 程序中,我同时扩展和嵌入了 Python。
spam.c:
#include <Python.h>
static PyObject *
spam_echo(PyObject *self, PyObject *args) {
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = printf("%s\n", command);
return Py_BuildValue("i", sts);
}
static PyMethodDef SpamMethods[] = {
{"echo", spam_echo, METH_VARARGS, "Prints passed argument"},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initspam(void) {
(void) Py_InitModule("spam", SpamMethods);
}
int main(int argc, char *argv[]) {
PyObject *args;
PyObject *arg;
PyObject *result;
PyObject *moduleName;
PyObject *module;
PyObject *func;
Py_SetProgramName(argv[0]);
Py_Initialize();
initspam();
PyRun_SimpleFile(fopen("foo.py", "r"), "foo.py");
moduleName = PyString_FromString("__main__");
module = PyImport_Import(moduleName);
Py_DECREF(moduleName);
if (!module) {
return 1;
}
func = PyObject_GetAttrString(module, "foo");
Py_DECREF(module);
if (!func || !PyCallable_Check(func)) {
return 1;
}
args = PyTuple_New(1);
arg = Py_BuildValue("s", "hello world");
PyTuple_SetItem(args, 0, arg);
result = PyObject_CallObject(func, args);
Py_DECREF(arg);
Py_DECREF(args);
Py_DECREF(func);
printf("== before\n");
Py_Finalize();
printf("== after\n");
}
这里是调用的 Python 程序:
foo.py:
#!/usr/bin/python
import spam
def foo(cmd):
spam.echo(cmd)
我用
编译gcc spam.c -I/usr/include/python2.5/ -lpython2.5
使用 GCC 4.2.4-1ubuntu4,我在 Ubuntu Hardy 上使用 python2.5-dev 包。
基本上,我在 Py_Finalize 有一个段错误,如输出所示:
hello world
== before
Segmentation fault
最佳答案
交换行 Py_DECREF(args);
和 Py_DECREF(arg);
解决了这个问题。段错误是在 Py_DECREF(args)
已被释放后访问 arg
的结果。
关于python - 单线程 C 程序中 Py_Finalize (python 2.5) 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14228662/
此代码似乎在启用优化的广泛使用的编译器上中断,尽管它在 Visual Studio 中运行良好。 struct foo { foo(int a) { s[0] = '0'+a%10;s[1]
我想要一个图表,其中有一个单线箭头,如下所示: 1 2 3 4 5 或者像这样(其中/假设是一个箭头:)): \/ -----------------
我正在为 Java 编写自定义规则。有两个 Tree.KIND 实例(STRING_LITERAL 和 ASSIGNMENT)需要捕获。有一个特定的行,字符串文字和赋值的逻辑都会引发问题。但 Sona
Rosettacode.org 在 Ruby 中有这个出色的单行 FizzBuzz 解决方案。 1.upto(100){|n|puts'FizzBuzz '[i=n**4%-15,i+13]||n
很多时候我使用了这个命令,它在当前目录打开了一个临时的 HTTP 服务器: python3 -m http.server 现在我需要接收文件,有没有打开ftp服务器的一行命令? 我只是在寻找一个命令行
相关主题 std::unique_ptr, deleters and the Win32 API 要将 Win32 句柄用作 RAII,我可以使用以下行 std::unique_ptr::type,
我认为必须有一个单行 Guava 解决方案来将一个不可变列表转换为另一个不可变列表,但我找不到它。假设我们有以下对象: ImmutableList input = ImmutableList.of("
我有以下 Highcharts ( http://www.highcharts.com ) 散点图。请注意,轴从 -10 开始,到 10 停止,中间为 0。我希望每条 0 线的宽度或颜色都与其他线不同
我有一个项目需要将一个视频文件与另一个音频文件合并。预期的输出是一个视频文件,其中包含来自实际视频的音频和合并后的音频文件。输出视频文件的长度将与实际视频文件的大小相同。 是否有单行 FFMPEG 命
我在 python3 类中有 2 个列表: self.keys = ["a","b","c","d"] self.values = [1,2,3,4] len(self.keys) == len(se
我有一个不同长度的数组列表,我想将它们组合成一个最大维度的矩阵,并在末尾填充零。例如(伪代码): combine( [1,2,3], [4,5]) [[1,2,3],[4,5,0]] 这是我目前的解决
例如,给定 i=5 和 n=8,我想生成 [0;0;0;0;1;0; 0;0]。具体来说,我想生成向量 v 以便: v = zeros(n,1); v(i) = 1; 有没有一种(合理的)方法可以在一
我是一名优秀的程序员,十分优秀!