0

HBufを機能に渡していますが、クラッシュします。正しい方法に従っているかどうかわかりません。

//case 1:

HBufC8* iBuffer2 = HBufC8::NewL(1000 );

TPtr8 bufferPtr( iBuffer2->Des() );

 //assigning value to HBuf code


StartParsingL(iBuffer2);

StartParsingL(HBufC8* aHBufPtr)
{

  iBuffer = HBufC8::NewL(aHBufPtr->Length());//it crashes here
  bufferPtr.Copy(aHBufPtr->Des());//also here
}
4

3 に答える 3

1

あなたの質問に答えていません (実際には十分な情報がないため)。HBuf の代わりに RBuf を使用することをお勧めします。RBuf は今後推奨されるヒープ バッファー記述子であり、少し使いやすいからです。

于 2009-07-29T16:02:40.160 に答える
0

Symbianコーディング規約では、接頭辞「i」の変数はメンバー変数です。

スニペットには、ローカル宣言として含まれています。スニペットを明確にするために型を入力しただけかもしれませんが、メンバー変数とローカル宣言の両方として宣言した場合は、多くのクラッシュを説明できます:-)

あなたが持っている必要があります:

class C....: public CBase?....
   {
private:
   HBufC8* iBuffer2;
   };

...

void C...::ConstructL()
   {
   ...
   iBuffer2 = HBufC8::NewL(1000);
   ...
   }
于 2009-07-06T06:10:09.697 に答える
0

このコードは、クラッシュの理由を直接示していません。次回は実際のスニペットを投稿してください。

また、クラッシュについて投稿するときは、どのようにクラッシュしているかを知っておくとよいでしょう。KERN-EXEC 3 パニックだと思います。ただし、それについては自分で明確にしてください。

aHBufPtr渡された toStartParsingLがゼロであるか、有効なHBuf8オブジェクトを指していないと思います。それがクラッシュの直接の理由になります。有効なポインターではない理由はコードには表示されませんが、1 つの理由は、@Will によって疑われるように、メンバー変数をローカル変数でシャドウする可能性があります。

ここでのクラッシュとは関係ありませんが、一般的な Symbian C++ にはさらにいくつかのポイントがあります。

  • 記述子を渡すときは、最も一般的な読み取り専用TDesCまたはTDesC8型参照、または読み取り/書き込みTDesまたはTDes8型参照を使用する必要があります。HBufCorHBufC8ポインターは、呼び出し先に所有権を譲渡する場合にのみ使用してください。

  • このスニペットでは: bufferPtr.Copy(aHBufPtr->Des()); Copyを受け入れるTDesC&ので、 を呼び出す必要はありませんDes: ただし、記述子をコピーするだけの場合は、などの記述子関数bufferPtr.Copy(*aHBufPtr); を使用できます。AllocAllocL

于 2009-07-06T06:33:25.377 に答える