- ベストアンサー
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サイズずつ大きくできるのでしょうか。 よろしくおねがいします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
str_pが文字列ならばstrlenを使うぐらいしか方法がないと思います。 a=realloc(str_p, strlen(str_p) + 1 + sizeof(char)); (なお、1を足したのは文字列の最後の\0の分) 文字列でなければ、#1の方のように、確保している量を記憶するしかないでしょう。 ところで、余計かもしれませんが、 reallocの使用はあまりお勧めできません。 reallocは、可能なときは今使っているメモリの後に確保するけど、 そうでないときは、他の場所にメモリを確保し、内容をコピーするという動作をします。 状況によってはひどく効率の悪いプログラムになるかもしれません。 (わかってやっているなら無視してください)
その他の回答 (2)
- jmh
- ベストアンサー率23% (71/304)
_msize() みたいのがあるかも。ただし、あったとしてもどこでも使えるというモノではない気がします。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
現在確保している大きさを変数に入れとけば。 char* str_p; int n = 0; str_p = (char*)malloc(++n); while (1) { str_p = (char*)realloc(str_p, ++n); }