У меня есть проект Visual Studio, который я портирую на Android. Я сталкиваюсь с проблемой ошибки сегментации в вызовах функций, которая напоминает функции ниже:
char* format1(const char* fmt, ...) {
char* buf = new char[1030];
va_list ap;
va_start(ap, fmt);
vsprintf(buf, fmt, ap);
va_end(ap);
return buf;
}
char* format2(const char* fmt, ...) {
va_list ap;
va_start(ap, fmt);
char* s = format1(fmt, ap);
va_end(ap);
return s;
}
Вызов функций следующий:
char* s = format2("%*.*d", 8, 8, 9910153);
У меня есть пара вопросов относительно вышеупомянутого:
Если я переберу код в gdb для вызова функции 'function2', она покажет:
формат (fmt = 0x4)
Почему это так?
Когда вызывается 'function1', GDB показывает:
format1 (fmt = 0x15be30 «какое-то случайное значение в памяти»)
Почему же значение fmt изменилось? Также, в зависимости от значения в fmt, второй вызов приводит к ошибке сегментации.
Любая помощь в объяснении вышеупомянутого поведения будет высоко ценится.