AIX 6.1 では、 への呼び出し後に が何らかの形で にargv
設定されるコードがあります。まったく同じコードが、Linux、HPUX、および Solaris で動作していました。NULL
strdup
コア ダンプを取得しているプロダクション コードからの抜粋を次に示します。
Makefile
....
CFLAGS += -I$(SERVER)/shared/interfaces \
-DADAPTER_BUILD_DATE="\"$(shell date)\""
....
global.c
...
char *z_adapter_build_date = NULL;
...
共有.c
...
extern char *z_adapter_build_date;
...
test.c
int main(int l_argc, char **l_argv)
{
char *lbasename;
char *ltmp;
z_adapter_build_date = (char *)ADAPTER_BUILD_DATE;
ltmp = strdup(l_argv[0]);
lbasename = basename(ltmp);
if ((zprogname = strdup(lbasename)) == NULL)
{
printf("strdup failed:\n");
exit(1);
}
....
$ dbx ./test
warning: tpm_builtin_fn.cc is newer than /xps/ceal_800/rel/server/lib/libsql.so
warning: trans_tux.cc is newer than /xps/ceal_800/rel/server/lib/libsql.so
warning: varmap.cc is newer than /xps/ceal_800/rel/server/lib/libsql.so
(dbx) [1] stop in main
(dbx)
(dbx) r 1
[1] stopped in main at line 113 in file "/u01/xps/800/src/test.c" ($t1)
113 z_adapter_build_date = (char *)ADAPTER_BUILD_DATE;
(dbx) p l_argv[1]
"1"
(dbx) n
stopped in main at line 115 in file "/u01/xps/800/src/test.c" ($t1)
115 ltmp = strdup(l_argv[0]);
(dbx) p l_argv[1]
(nil)
ただし、赤いニシンかもしれません.ccファイルのバージョンに不一致があり、それが1つの理由であると思います. 値が NULL になる原因がよくわかりません。