こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

reallocでメモリを再確保するには?

こんにちわ,

今,
「すでに動的確保しているメモリをその型分1サイズだけ増やす」というプログラムを考えています。
具体的には,

char* str_p;
a=calloc(str_p, sizeof(char));

/*ここから問題のプログラム(実際はずっと動くので無理です*/
while(1)
{
a=realloc(str_p, sizeof(str_p)+sizeof(char));
}
・・・・・・

これだと,私的にはsizeof(str_p)で今のサイズを調べ,それにsizeof(char)を加えることで次々に1サイズ大きいメモリを再確保できると思ったのですが,ポインタのサイズを指していてそれにchar型のサイズをたしていていつも固定サイズになるみたいでうまくいきません。

どうすれば,char*などポインタ型の変数の大きさを調べられるのでしょうか。

また,どうすれば,1サイズずつ大きくできるのでしょうか。

よろしくおねがいします。

投稿日時 - 2003-06-03 14:16:38

QNo.564918

すぐに回答ほしいです

質問者が選んだベストアンサー

str_pが文字列ならばstrlenを使うぐらいしか方法がないと思います。
a=realloc(str_p, strlen(str_p) + 1 + sizeof(char));
(なお、1を足したのは文字列の最後の\0の分)
文字列でなければ、#1の方のように、確保している量を記憶するしかないでしょう。

ところで、余計かもしれませんが、
reallocの使用はあまりお勧めできません。
reallocは、可能なときは今使っているメモリの後に確保するけど、
そうでないときは、他の場所にメモリを確保し、内容をコピーするという動作をします。
状況によってはひどく効率の悪いプログラムになるかもしれません。
(わかってやっているなら無視してください)

投稿日時 - 2003-06-04 01:14:55

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

jmh

_msize() みたいのがあるかも。ただし、あったとしてもどこでも使えるというモノではない気がします。

投稿日時 - 2003-06-04 03:11:17

ANo.1

現在確保している大きさを変数に入れとけば。

char* str_p;
int n = 0;
str_p = (char*)malloc(++n);

while (1) {
str_p = (char*)realloc(str_p, ++n);
}

投稿日時 - 2003-06-03 14:22:46

あなたにオススメの質問