-3

new を使用してメモリを割り当て、クラスの変数を初期化します。

使用されるコードは次のとおりです。

新しいオペレーター:

ptrIssuResrc = new IssuResource();
-----------------------------------

クラス定義:

class IssuResource
{
 public:
    // constructor: create a IssueResource object
    IssuResource(void)
    {
        lastUpdatedResource = 0;
    }
    UINT16 lastUpdatedResource;
    UINT32 conn_list[MAX_CONNECTION];
    bool addConnResourceToList(UINT32);

使用ptrIssuRescr:

class IssuResource *issuResrcPtr = NULL;
issuResrcPtr = card->ptrIssuResrc;

class IssuResource *ptrIssuResrc = card->ptrIssuResrc;
ptrIssuResrc->addConnResourceToList(connection->getLcn());

このコードが原因でメモリの破損に直面していますが、絞り込みました。ここで何が問題なのか教えてください。メモリ破損がないようにするにはどうすればよいですか? 新しい演算子をコード内の別の場所に移動したところ、正常に機能しました。しかし、それが新しい問題を引き起こさないようにする必要があります。

ティア

4

2 に答える 2

2

私たちはあなたのコードに精通していないので、あなたを助けることはできません. クラス定義がすべてを教えてくれるわけではありません。コードの実行中にオブジェクトで何が起こるかを正確に知る必要があります。Valgrind を使用できない場合は、無料で Windows OS 上で動作する AppVerifier + DebugDiag を使用することをお勧めします。

これらのアプリケーションは、メモリの破損に大いに役立ちました。私は自分のコードの何が問題なのかを見つけるのに非常に長い間苦労していました.彼らのおかげで、これを行うのに数分しかかかりませんでした.

それらを使用する方法の優れたチュートリアルへのリンクは次のとおりです。 .aspx

基本的に、ヒープの破損が発生する場所がわかるため、問題を見つけやすくなります。

これがあなたを助けることを願っています。

于 2013-01-24T08:43:02.060 に答える
0

さて、あなたの投稿には多くのコンテキストがありませんが、Valgrind でこのコードを実行して、メモリリークや初期化されていないデータへのアクセスなどがあるかどうかを確認できます.

おそらく、問題を説明するコードがさらに役立つでしょう...

于 2013-01-24T08:31:43.213 に答える