アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちわ,

今,
「すでに動的確保しているメモリをその型分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サイズずつ大きくできるのでしょうか。

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

A 回答 (3件)

str_pが文字列ならばstrlenを使うぐらいしか方法がないと思います。


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

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

_msize() みたいのがあるかも。

ただし、あったとしてもどこでも使えるというモノではない気がします。
    • good
    • 0

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



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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!