私はこのように、未定義の引数を持つ関数を呼び出すプログラムがあります。C /口が達者なメモリ管理{なしダングリング参照> whyy ??!}
#include <stdargs.h>
... /* code */
int main() {
GArray *garray = g_array_new (FALSE, FALSE, sizeof (char *));
/* the code above initialize the GArray, and say that the garray expect a pointer to char. */
function_name (garray, "arg2", "arg3" /* and so on ... */);
... /* code */
}
ノート「」との引数は文字列である、ということをので、関数内の_名前:だから
static void function_name (GArray *garray, ...) {
... /* code */
char *data;
data = va_arg (garray, gchar *);
g_array_append_val (garray, data);
... /* code */
}
、関数の戻り値は、teoricallyデータが指摘、無効にする電源を入れたときに、va_listの内の引数にデータポイントの場合、あまりにもガライインチ
(データポインターがメモリアドレスを指しているので、ダングリングリファレンスが発生します。
しかし、そのようなことは起こっていないようだが、プログラムは正常に動作する。どうして? Cでは、関数に渡された引数はスタックに格納されるため、データのスタックは実際にはメモリになりますか?
thnkxたくさん。
あなたは静的な記憶期間を持つオブジェクトが作成されたと言っていますが、私はそれを知りません、thnxのカフェ、これは私の疑いを説明する! ; D – drigoSkalWalker