malloc realloc ポインタの参照渡しについて
Posted: 2009年12月31日(木) 03:06
はじめまして、C言語の勉強をしている者です。
ポインタの参照渡しを行い、2日ほど足踏みしている状態で
もうどうにもわからないので、質問します。
以下にサンプルコードを書きます。
かなり醜くて申し訳ありません。。。
参照渡しを行い、値を設定し戻してくれるものだと思っていたのですが
「malloc」, 「realloc」を使用すると、どうもうまくいきません。
使い方がダメなのでしょうか。。
すみません。どなたか。。。どなたかご教授いただけないでしょうか。
ポインタの参照渡しを行い、2日ほど足踏みしている状態で
もうどうにもわからないので、質問します。
以下にサンプルコードを書きます。
===================================================
1. 普通に動くもの
===================================================
---------------------------------------------------
main
[概要] aの配列を hoge関数に参照渡しを行い
aの配列に値を代入する。
要素は「5」個とする。
---------------------------------------------------
int main(void) {
int a[5];
hoge(a);
return 0;
}
---------------------------------------------------
hoge
---------------------------------------------------
void hoge(int *a) {
int i;
for (i = 0; i < 5; i++) {
a = i;
}
}
/// ends
===================================================
2. 質問(動かないもの)
===================================================
---------------------------------------------------
main
[概要] aの配列を hoge関数に参照渡しを行い
aの配列に値を代入する。
要素は決まっていない。
---------------------------------------------------
int main(void) {
int a[1];
hoge(a);
return 0;
}
---------------------------------------------------
hoge
---------------------------------------------------
void hoge(int *a) {
int i;
int *buf;
int total = 0;
// 要素生成
a = (int *)malloc(sizeof(int) * 1);
// 999 になるまで繰り返す
for (i = 0; total <= 999; i++) {
// 実際は「i」ではなく、キーボードからの入力値になります。
a = i
// 合計に加算
total += tensuu;
if (total <= 999) {
// 要素生成
buf = (int *)realloc(a,sizeof(int) * i + 2);
if (buf == NULL) {
exit(0);
}
a = buf;
}
}
}
/// endsかなり醜くて申し訳ありません。。。
参照渡しを行い、値を設定し戻してくれるものだと思っていたのですが
「malloc」, 「realloc」を使用すると、どうもうまくいきません。
使い方がダメなのでしょうか。。
すみません。どなたか。。。どなたかご教授いただけないでしょうか。
