将 const char * 传递给函数

时间:2021-02-22 16:15:03

标签: c++ string python-c-api

我正在尝试使用 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 

已解决:错误是由在代码中的不同位置写入超出范围的数组元素引起的。

1 个答案:

答案 0 :(得分:2)

<块引用>

我传递参数的方式是错误的还是好的,我应该尝试在我的其余代码中找到内存管理错误?

您传递原始 C 字符串的方式是正确的。

malloc 内部崩溃通常表明程序以某种方式损坏了内部堆结构。 在执行这两行之前查看程序是否做了任何不好的事情(例如写入已释放的内存块或写入已分配的块之外)。

相关问题