2017-02-08 10 views
0

私はCプログラムを書いています。私はchar *メンバーを持つ構造体を持っています。Char *に#defineの値を割り当てることはできますか?

#define SS_Value_1 "Value for SS1" 
#define SS_Value_1 "Value for SS2" 

struct aSamplestruct { 

char* s1; 
char* s2; 

}aSample; 

aSample ss; 

fun1(&aSample); 

私は関数に構造ポイントを送っていると私は

以下に示すように、ベストプラクティスは、S1にメモリを割り当て、私たちが望む今までに何の文字列をコピーし、使用後、割り当てられたメモリを解放することです知っています
ss->s1 = (char*) MEM_alloc(sizeof(char) * (strlen(SS_Value_1) + 1); 
strcpy(ss->s1, SS_Value_1); 

レポートで変数ss.s1を使用し、memをフリーにします。

MEM_free(ss.s1); 

これは問題なく動作します。私は36の異なる条件でいくつかのchar *メンバーのための同じコードを書く必要があります。

他の方法は、メモリを割り当てずに、以下のように#define値を自分の構造体メンバに直接割り当てることができるということです。

ss->s1 = SS_Value_1; 

レポートでこの変数を使用し、メモリを解放する必要はありません。 この方法でも、サンプルの実行に問題はありません。私が知りたいのですがどのような

が、これは任意のメモリリークが発生しますか

のですか? 大きなデータの場合は実行を停止しますか?

事前に感謝

よろしく、 のSudhir

答えて

1

これは のchar * strのに似ています。 str = "abc";

つまり、文字列リテラルを作成し、そのアドレスをポインタに割り当てると、charポインタが宣言されます。任意の量のデータに対して機能するはずです。

関連する問題