将 const char * 传递给函数
Passing const char * to function
我正在尝试使用 Python/C API 在 C++ 应用程序中嵌入 python 解释器。在我的代码中存在这样的东西:
string code("python code here");
PyRun_SimpleString( code.c_str() );
Python/C API 函数需要 const char *
参数。此代码在循环中执行,我的应用程序有时会在 PyRun_SimpleString
命令上崩溃。崩溃总是在第一次循环迭代中发生,我想我在接下来的循环中没有遇到错误。有时我可以 运行 这个循环很多次(例如 50),有时第一次尝试就失败了。
我传递参数的方式不正确还是很好,我应该尝试在我的其余代码中查找内存管理错误?
调试器信息:
Thread #1 [0_FULL_GAME] 16044 [core: 0] (Suspended : Signal : SIGSEGV:Segmentation fault)
malloc_consolidate() at malloc.c:4 492 0x7ffff7513be3
_int_malloc() at malloc.c:3 699 0x7ffff7515e03
__GI___libc_malloc() at malloc.c:3 066 0x7ffff7518419
0x7ffff7c74458
PyArena_New() at 0x7ffff7baf423
PyRun_StringFlags() at 0x7ffff7ba7648
PyRun_SimpleStringFlags() at 0x7ffff7ba8969
Spectacle::update() at spectacle.cpp:144 0x555555590a5d
State::process() at state.cpp:6 0x5555555981be
Game::run() at game.cpp:25 0x55555557a3ce
main() at main.cpp:6 0x55555557f622
已解决:错误是由于在代码中的不同位置写入数组元素超出范围引起的。
Is my way of passing an argument incorrect or it is good and I should try to find memory management error in the rest of my code?
您传递原始 C 字符串的方式是正确的。
内部崩溃 malloc
通常表示程序以某种方式损坏了内部堆结构。查看程序是否做了任何坏事(比如写入释放的内存块或在分配的块之外写入)在这两行被执行之前。
我正在尝试使用 Python/C API 在 C++ 应用程序中嵌入 python 解释器。在我的代码中存在这样的东西:
string code("python code here");
PyRun_SimpleString( code.c_str() );
Python/C API 函数需要 const char *
参数。此代码在循环中执行,我的应用程序有时会在 PyRun_SimpleString
命令上崩溃。崩溃总是在第一次循环迭代中发生,我想我在接下来的循环中没有遇到错误。有时我可以 运行 这个循环很多次(例如 50),有时第一次尝试就失败了。
我传递参数的方式不正确还是很好,我应该尝试在我的其余代码中查找内存管理错误?
调试器信息:
Thread #1 [0_FULL_GAME] 16044 [core: 0] (Suspended : Signal : SIGSEGV:Segmentation fault)
malloc_consolidate() at malloc.c:4 492 0x7ffff7513be3
_int_malloc() at malloc.c:3 699 0x7ffff7515e03
__GI___libc_malloc() at malloc.c:3 066 0x7ffff7518419
0x7ffff7c74458
PyArena_New() at 0x7ffff7baf423
PyRun_StringFlags() at 0x7ffff7ba7648
PyRun_SimpleStringFlags() at 0x7ffff7ba8969
Spectacle::update() at spectacle.cpp:144 0x555555590a5d
State::process() at state.cpp:6 0x5555555981be
Game::run() at game.cpp:25 0x55555557a3ce
main() at main.cpp:6 0x55555557f622
已解决:错误是由于在代码中的不同位置写入数组元素超出范围引起的。
Is my way of passing an argument incorrect or it is good and I should try to find memory management error in the rest of my code?
您传递原始 C 字符串的方式是正确的。
内部崩溃 malloc
通常表示程序以某种方式损坏了内部堆结构。查看程序是否做了任何坏事(比如写入释放的内存块或在分配的块之外写入)在这两行被执行之前。