【问题标题】:Passing a pointer to a C++ function in a C Project在 C 项目中传递指向 C++ 函数的指针
【发布时间】:2016-06-16 23:39:15
【问题描述】:

我有一个巨大的 C 项目。 现在我需要一个 C++ 函数来填充一些变量。

将函数声明为 extern "C",从 C 项目调用函数没有问题。

问题是,我需要将指针传递给 C++ 函数,并且在函数中,我想为指针赋值。 但正是在这一点上,程序因“分段错误”而崩溃。

有没有办法让它工作?还是说在 C 和 C++ 之间不能以这种方式使用指针?


在 C 中将函数作为线程调用:

 Restwo = pthread_create(&num, NULL, (void *) function, &var);

标题

 #ifdef __cplusplus
extern "C"
{  // Dies sorgt dafür, dass der Header sowohl in C als auch in C++ funktioniert
#endif

    int function(int *pITS);

#ifdef __cplusplus
}
#endif

C++ 函数

extern "C" {
    int getNewLsaSignals(int *var) {
        printf("Successfully started\n"); //works
        var = 19; //doesn't work
        //insert some c++ code here
    }
}

【问题讨论】:

  • 你还需要确定你实际上是为var分配内存。
  • 实际上变量是一个复杂的结构体,它已经被数据填充了。在 extern C++ 函数中,我只想更改这些值。所以已经为 var 分配了内存。

标签: c++ c function pointers extern-c


【解决方案1】:

我想给指针赋值。

在那种情况下,你需要改变

 var = 19;

 *var = 19;

因为很可能var = 19; 使指针指向您的应用程序无法访问的内存位置,因此该指针的任何后续取消引用都将调用undefined behavior

此外,在直接取消引用之前检查传入指针的NULLity 几乎总是安全的。

【讨论】:

  • @IlDivinCodino 好的,那么。作为一个非英语母语的人,有时我无法理解其他方言。
  • 首先感谢您的回答,但如果我使用 var = 19;编译器说:错误:一元''的无效类型参数。如果我在 C 代码中编写与上面相同的示例 var = 19;完美运行。但我需要在 C++ 中执行此操作,并且它会导致分段失败。
  • 它在 C 中也不能完美运行。它只是编译。它会在运行时轰炸。将文字分配给指针几乎总是一个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多