私はそれが未定義の動作だと思う状況に遭遇しました:いくつかのメンバを持つ構造体があり、そのうちの1つがvoidポインタです(私のコードではなく、publicではありません。それをより一般的にする)。 voidポインターに特定のメモリを割り当てても、未定義の動作ですか?
void fooTest(ThatStructure * someStrPtr) {
try {
someStrPtr->voidPointer = new char[someStrPtr->someVal + someStrPtr->someOtherVal];
} catch (std::bad_alloc$ ba) {
std::cerr << ba.what << std::endl;
}
// ...
及びいくつかの時点でそれがセグメンテーション障害と割当部(演算子新しい)(それが動作数回、この機能のより多くのコールがあるでクラッシュ:このポインタにいくつかの点でいくつかのチャーメモリを割り当てられ、より多くの場合)。私はこれをデバッグで見たことがあります。
私の知る限りでは、私のマシンはLinuxを使用していますが、セグメンテーションフォールトが最初にあります(私はメモリを割り当てる関数の最初の呼び出しであると思います)。
もっと私は値の印刷追加した場合、:tryブロックの前に
std::cout << someStrPtr->someVal << " " << someStrPtr->someOtherVal << std::endl;
を、それが最後まで実行されます。このプリントは、構造体ポインタに関する他の問題があるかどうかを調べるために行ってきましたが、値は出力され、0または負ではありません。
私はこれらのトピックを見てきました:topic1、topic2、topic3と私はいくつかのUBがvoidポインタにリンクしていると思っています。誰もが私はそれを解決することができますので、ここで問題を指すのを助けることができます、ありがとう?
[mcve]を入力してください。 'char *'を 'void *'に割り当てることは、まったく問題ありません。 – Barry
これはマルチスレッドアプリケーションですか? – NathanOliver
'bad_aloc $ ba'ですか? – AnT