質問です。
電話帳のプログラムを作りたいのですが、データが追加される毎にメモリを割り当てるにはどうすれば良いのですか?
ポインタを使って、ポインタ++のたびにメモリを割り当てたいです。
色々調べたのですが、calloc()を使うとデータが消えてしまいます。
教えてください。
realloc()使ってみては?
編集 削除std::vectorを使えば何も考えずに突っ込めます。
#C++ですが。
すみません。C言語です。
realloc()を使う場合、例えば
int *p;
p=(int*)calloc(1,sizeof(int));
++p=(int*)realloc(p++,sizeof(int));
で良いのですか?
ポインタの「反復子(iterator)としての機能」と
「オブジェクトの別名(alias)としての機能」がごっちゃになっていますね。
int * base = 0; /* これはaliasとして利用 */
int count;
for (count = 0; count < 5; ++ count) {
int sum = 0;
int * ptr; /* こっちはiteratorとして利用 */
base = realloc(base, sizeof(int) * (count + 1));
for (ptr = base; ptr != base + count; ++ptr) {
sum += *ptr;
}
*ptr = sum + 1;
}
free(base);
aliasに利用するポインタに対して加算等の演算を行ってはいけません。
malloc/calloc/reallocで得たポインタは,常にaliasの為にのみ使います。
iteratorの機能が必要であれば,そのポインタをコピーして用意する必要があります。
成功しました。
ありがとうございました。