2017-02-28 9 views
2

構造体にcharポインタがあります。この構造体メンバに静的メモリを割り当てたい。これどうやってするの?Cの構造体で定義された文字ポインタに静的メモリを割り当てる

例:

struct my_data { 
    int x; 
    bool y; 
    char *buf; 
}; 

がどのようにこのchar型のポインタに10バイトのスタティックメモリを割り当てるには?私は動的メモリ割り当てを割り当てるmallocを知っています。これでいい?

struct my_data data; 
char buffer[10]; 
data.buf = &buffer[0]; 

PS:私は、この構造体を変更し、動的メモリを割り当てるためにmalloc関数を使用することはできませんしています。 bufferが今まで持続寿命を持っている必要がありますかあなたはそれがどこにあるか、それは(すなわちルーチンを割り当て解除ていないことを確認する必要があり

data.buf = buffer; 

なお:(配列は自動的にポインタに崩壊する)もっと簡単になります

+0

静的とは、プログラムの実行時間全体にわたって持続することを意味しますか?そして、あなたがしたことは正当なものですが、それが正しいかどうかは、アプリケーションのニーズによって決まります。 – StoryTeller

+0

ありがとう@StoryTeller。 – mehtame026

答えて

3

宣言されたリターン)を使用しているか参照しています。

サブルーチンから割り当てて戻すと、返されたときにメモリが割り当て解除されるため、細かい動作が発生します。 UBのこの種によって導入

struct my_data foo() 
{ 
struct my_data data; 
char buffer[10]; 
data.buf = &buffer[0]; 
return data; 
} 
int main() 
{ 
    struct my_data d = foo(); // buffer is already gone 

バグは厄介ですコードはしばらくの間、動作しているようですので、まで:(私たちは多くの場合、ここでの質問に見るように)これを行わない場合については

割り当てられていないバッファは、別の関数呼び出しによってclobberedになります。

+0

説明のために@Jeanに感謝します。私はあなたの意見を持っています。 – mehtame026

関連する問題