私は、次のコードを持っている:ヒープとスタックの問題 - Cプログラミング
#include <stdlib.h>
#include <stdio.h>
struct B
{
int _arr[5];
};
struct A
{
struct B *_pb_arr;
};
int main()
{
int i,j;
struct B b;
struct B *pb = (struct B*)malloc(sizeof (struct B));
*pb = b;
struct A a;
a._pb_arr = (struct B*)malloc(sizeof (struct B)*2);
a._pb_arr[0] = b; //first question
a._pb_arr[1] = *pb; //second question
for (i=0;i<2;++i)
{
for (j=0;j<5;++j)
{
a._pb_arr[i]._arr[j] = i;
}
}
struct A a2 = a;
for (i=0;i<2;++i)
{
for (j=0;j<5;++j)
{
printf ("%d, ", a2._pb_arr[i]._arr[j]);
}
}
return 0;
}
私の質問は次のとおりです。上の理由:a._pb_arr[0] = b;
割り当てがスタックにあります。 そして次の行に:a._pb_arr[1] = *pb
割り当てはヒープ上にありますか?
ヒープにはa.pb_arr
が割り当てられており、各割り当てはヒープ上にもあるようです。
これは、「割り当てが(スタック|ヒープ上にある)」という意味に依存します。 (これは標準的な用語ではありません)。最初の割り当ては、スタックからヒープに構造をコピーすることですが、2番目の割り当てはヒープのある部分から別の部分に構造をコピーすることです。 – ruakh
あなたの質問は完全にはっきりしませんが、最初にスタックに定義されていたにもかかわらず、構造体が常に割り当てによってヒープにコピーされる理由を知りたいのですか? –
だから、私はあなたの両方を控えめに思っています...どちらの場合でも、ヒープにコピーされますか? –