動的メモリ確保
Posted: 2006年12月14日(木) 11:04
動的メモリ確保で悩んでます。
ちなみに、ポインタの知識は少ないです。
下記に記したように、main上で動的メモリ確保はできたのですが、
<pre>
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
int *a;
int totala = 5;
a = (int*)malloc(totala * sizeof(int));
for(i=0; i<totala ;i++){
a=i;
}
for(i=0; i<totala ;i++){
printf("a[%d] = %d\n",i,a);
}
return 0;
}
</pre>
実行結果
a[0] = 0
a[1] = 1
a[2] = 2
a[3] = 3
a[4] = 4
一旦他の関数へいき、そこでメモリ確保をし、
main上で使用する事ができませんでした(下記)。
<pre>
#include <stdio.h>
#include <stdlib.h>
void Read(int *a, int *totala);
int main(){
int i;
int *a;
int totala = 0;
Read(a, &totala);
printf("totala %d in main\n",totala);
for(i=0; i<totala ;i++){
printf("a[%d] = %d in main\n",i,a);
}
return 0;
}
void Read(int *a, int *totala){
int i;
*totala = 5;
printf("totala %d in Read\n",*totala);
a = (int*)malloc(*totala * sizeof(int));
for(i=0; i<*totala ;i++){
a=i;
}
for(i=0; i<*totala ;i++){
printf("a[%d] = %d in Read\n",i,a);
}
};
</pre>
実行結果
totala = 5 in Read
a[0] = 0 in Read
a[1] = 1 in Read
a[2] = 2 in Read
a[3] = 3 in Read
a[4] = 4 in Read
totala = 5 in main
上記に記したように、グローバル変数を用いずに、
一旦他の関数へいき、そこでメモリ確保をし、
main上で使用するという事はできないのでしょうか?
また、こういうやり方は間違っているのでしょうか?
グローバル変数を使用したほうがいいのでしょうか?
書き方のアドバイスも宜しくお願います。
ご指導宜しくお願いします。
ちなみに、ポインタの知識は少ないです。
下記に記したように、main上で動的メモリ確保はできたのですが、
<pre>
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
int *a;
int totala = 5;
a = (int*)malloc(totala * sizeof(int));
for(i=0; i<totala ;i++){
a=i;
}
for(i=0; i<totala ;i++){
printf("a[%d] = %d\n",i,a);
}
return 0;
}
</pre>
実行結果
a[0] = 0
a[1] = 1
a[2] = 2
a[3] = 3
a[4] = 4
一旦他の関数へいき、そこでメモリ確保をし、
main上で使用する事ができませんでした(下記)。
<pre>
#include <stdio.h>
#include <stdlib.h>
void Read(int *a, int *totala);
int main(){
int i;
int *a;
int totala = 0;
Read(a, &totala);
printf("totala %d in main\n",totala);
for(i=0; i<totala ;i++){
printf("a[%d] = %d in main\n",i,a);
}
return 0;
}
void Read(int *a, int *totala){
int i;
*totala = 5;
printf("totala %d in Read\n",*totala);
a = (int*)malloc(*totala * sizeof(int));
for(i=0; i<*totala ;i++){
a=i;
}
for(i=0; i<*totala ;i++){
printf("a[%d] = %d in Read\n",i,a);
}
};
</pre>
実行結果
totala = 5 in Read
a[0] = 0 in Read
a[1] = 1 in Read
a[2] = 2 in Read
a[3] = 3 in Read
a[4] = 4 in Read
totala = 5 in main
上記に記したように、グローバル変数を用いずに、
一旦他の関数へいき、そこでメモリ確保をし、
main上で使用するという事はできないのでしょうか?
また、こういうやり方は間違っているのでしょうか?
グローバル変数を使用したほうがいいのでしょうか?
書き方のアドバイスも宜しくお願います。
ご指導宜しくお願いします。