■delete a[];はエラーか?
>> x=new char[n]; を開放するときは delete x[];
>>という人もいますが、これは間違いではないでしょうか。
>
>そもそもそんな書き方ってできましたっけ。
柴田望洋さんとういう方の次のHPには
http://www.bohyoh.com/CandCPP/FAQ/FAQ00085.html
new/deleteのサンプルリストがあって
int *a = new int[no]; /* 確保 */
//中略
delete a[]; /* 解放 */
とあります。
気になったので、今、Borland C++5.5でコンパイルしてみると
コンパイルエラーで叱られました。
#投稿した後でテストするあたりは、ものぐさなもので、
すいません。(あ、石投げないで)
■2次元配列の動的確保
ところで、また教えてください。
xM列yM行の2次元の配列p(というか配列もどき)を確保するときは
Borland C++5.5 のマニュアルによると
(program A)
char *p;p=new char *[yM];
for(y=0;y<yM;y++)p[y]=new char[xM];
とあります。これは、次のように書いても良いと思います。
(program B)
char *p;p=new char *[yM];
p[0]=new char[xM * yM];
for(y=1;y<yM;y++)p[y]=p[0]+y*xM;
(A)(B)どっちが良いのでしょうか?
ちなみに個人的な意見(というか直感)では
(A)の方がわかりやすいですね。たぶん。
しかし、
(B)の方が、例の「どこかの領域」を節約するため効率的と思います。
また、(B)では、連続するデータがメモリー上に連続して確保されるはずなので
fread/fwriteなどの場合
fread(p[0],sizeof(char),xM*yM,fp);
と一発で書けて便利と思います。
この点、みなさん、どうお考えですか。
■2次元配列の開放
上のプログラム(B)のときのメモリ開放は
delete[] p[0];
delete[] p;
ですよね。
(初心者なのでなんとなく自信がないです。くだらない質問ですいません。)
■メモリー閲覧
最後に、メモリー操作の結果を確認するソフトというのは
何かありますか?(メモリー閲覧ソフト?)
つまり、このソフト自体は指定されたアドレスに常駐させておき
キーボードなどでアドレス範囲を指定すると
そこのメモリーのデータが10進数で表示される
というものです。
(なければ、私が自分で作ってみたいな...と思っています)
以上、お願いします。