До сих пор у меня был код, который отлично работал с переменной wfiles
. wfiles инициализируется в моем основном файле:Ошибка сегментации при вызове strlen с ранее выделенным указателем
char* wfiles = "";
Какой, насколько я могу судить, C не имеет жалоб. Далее переменная wfiles
выделяется в распределительном заявление:
switch (c) {
case 't':
/* the user wants a template */
template = optarg;
break;
case 'f':
wfiles = optarg;
break;
case 'v':
vcs = optarg;
break;
case 'u':
url = optarg;
break;
case 's':
/* custom save location */
save_loc = optarg;
break;
case '?':
break;
default:
abort();
}
я, наконец, проверить на ли или нет wfiles
пуст:
if (!empty(wfiles))
пустой макрос, который расширяется до (strlen(wfiles) == 0)
я не могу см. любые проблемы с этим, но когда я запускаю этот код, я получаю ошибку сегментации. Раньше этого не было. Когда я запускал код в gdb с и без отладочных символов, я получаю одну строку, указывающую на ранее упомянутое утверждение if. Кто-нибудь знает, почему это?
Проблема в другом месте. Код, который вы показали, кажется, не имеет проблем. –
Откуда вы получаете 'optarg'? Поскольку единственным назначением 'wfiles' является' optarg', очень вероятно, что память, на которую он указывала, когда она была назначена, больше недействительна, когда вы вызываете 'strlen' позже –
@intricatedetail Просто выводите строку и ее адрес и все будет ясно. :) –