0

float* decode()静的ベクターの生データへのポインターを返すインターフェイスを介して cpp 関数が あります。

今私のCコードには

float *value0;
value0 = (float*) malloc(M* sizeof(float) );

今私がするとき

value0 = work_decode1(h0, code0, 7, retain0);

ビジュアル スタジオのデバッグ モードでカーソルを合わせると、value0 のベクターの最初の値しか表示されません。ここで何が問題なのですか?

4

2 に答える 2

1

float *配列ではなくポインタです。デバッガーは、それが指している要素の数を認識していないため、最初の要素のみを表示します。

ウォッチ ウィンドウでは、次の構文で要素の数を指定できます。

値0,20

20 は、表示する要素の数です。

于 2012-08-25T07:23:08.340 に答える
0

関数 decode() はライブラリから取得され、静的に割り当てられたメモリ バッファーへのポインターを返すと仮定します。次に関数が呼び出されたときに内容が変更されるため、最初の仕事はバッファをコピーすることです。バッファの長さ M を知る必要があります。

ベクトルにコピーすることをお勧めします。

std::vector<float> buffer(value0, value0+M);

私があなたのコードを正しく理解していれば、実際にメモリ リークが発生しています。バッファーにメモリを割り当てますが、そのポインターをデコード関数から返されたものに置き換えます。

于 2012-08-25T08:14:04.237 に答える