2

私は巨大な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
    }
}
4

1 に答える 1

4

ポインタに値を代入したい。

その場合は、変更する必要があります

 var = 19;

 *var = 19;

ほとんどvar = 19;の場合、アプリケーションからアクセスできないメモリ位置を指すポインターが作成されるため、その後のそのポインターの逆参照は未定義の動作を引き起こします。

NULLまた、着信ポインタを直接逆参照する前にその ityをチェックすることは、ほとんどの場合安全です。

于 2016-03-03T15:03:27.387 に答える