deleteで失敗して勝手にブレ−クポイントが設定される

[戻る]
taro 2002/02/07(木) 20:42:05
newとdeleteに付いての質問なのですが、下記のソ−スを実行すると、
ここを通過する際にブレ−クポイントが設定され、
Invalid Address specified to RtlValidateHeap
と言うエラ−がアウトプットに表示されます。

nCode++

を行わなければ(例えばnCode[i]の様に書けば)、正常に動作するのですが、処理の都合上どう
しても行いたいのです。
試しに delete[] &nCode[0]; 等も行って見たのですがうまくいきません。
どうやればうまくいくのでしょうか?
申し訳有りませんが、ご存じの方教えてください。

------------------------------
 int* nCode;
 nCode = new int[10];

 nCode++;

 if(nCode != NULL) {
    delete[] nCode;
    nCode = NULL;
 }
------------------------------

kazuma 2002/02/07(木) 21:11:49
int *nCode, *p;
p = new int[10];
nCode = p;

nCode++;

delete[] p;
p = NULL;

とかでいいのではないかと。

ひょっとして、1つ目を残して2つ目の要素以降のメモリ領域を削除しようとしてます?

PAI [E-Mail] 2002/02/08(金) 11:30:18
どうしてとってきたポインタを動かしたいんでしょうか?
どっちかって言うと、
vector<int>とイテレータですべき処理なんじゃないでしょうか?

NGA 2002/02/08(金) 11:54:23
>vector<int>とイテレータですべき処理なんじゃないでしょうか?
すべきかどうかはともかく、
確保したメモリの先頭アドレスを保持しないのはマズいですね。

taro 2002/02/12(火) 14:31:46
[[解決]]
みなさまお返事ありがとうございます、体調を崩してしまったために
返事が遅くなってしまいました、申し訳有りません。

今回どうして、ポインタを動かしたいかというと既にポインタを動かす
様にコ−ディングされていて、ソ−ス変更は最小限に押さえたいために
nCode++ でやろうと思いました。

とりあえずは、kazumaさんの教えてくれたとおり、先頭のアドレスを他の変数にも入れて
deleteしようと思います。

次からはきちんとPAIさんの仰るようにnCode[n]の形でコ−ディングしたいと思います。

NGAさん、先頭のアドレスは忘れず保持するようにします。

本当にどうもありがとうございました。

古いスレッドには追加発言できません。