Почему обнуляется указатель? [закрыт]

267
07 февраля 2020, 15:30
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».

Закрыт 10 месяцев назад.

Есть ОДНОПОТОЧНАЯ программа.

В ней есть функция

// Отправка даты последнего сообщения
void SendLastDate(char login[257], void *arg, void * responsSocket) {
    struct MyMessen *mes = (struct MyMessen *) arg;
    struct WordAnswer *tansw = (struct WordAnswer *)malloc(sizeof(struct WordAnswer));
    char TellsAdress[2048];
    unsigned long long int date = 0;
    FILE * TellsFile;
    std::ofstream File;
    // Получение адресса и создание недостающих файлов
    sprintf_s(TellsAdress, "%s%c%s%c%s", DBMesAdress, '/', login, '/', mes->pass);
    std::filesystem::create_directories(TellsAdress);
    sprintf_s(TellsAdress, "%s%s", TellsAdress, "/info.cat");
    if (!std::filesystem::exists(TellsAdress)) {
        File.open(TellsAdress);
        File.close();
    }
    // Открытие файла
    if (fopen_s(&TellsFile, TellsAdress, "r") != 0) {
        printf_s(" FileSystem ERROR!\n");
        mes->Answer = -2;
        SendPac(mes, responsSocket, false);
        return;
    }
    // Считывание даты
    if (!(fscanf_s(TellsFile, "%llu", &date) > 0)) {
        printf_s(" FileSystem ERROR!\n");
        mes->Answer = -3;
        SendPac(mes, responsSocket, false);
        return;
    } else 
    if (mes->Answer == 1) {
            mes->Answer = 0;
            sprintf_s(mes->pass, "%llu", date);
            SendPac(mes, responsSocket, false);
    } else
    if (mes->Answer == 2) { // Если нужно получить кол-во сообщений
        if (!(fscanf_s(TellsFile, "%llu", &date) > 0)) {
            printf_s(" FileSystem ERROR!\n");
            mes->Answer = -3;
            SendPac(mes, responsSocket, false);
            return;
        } else {
            mes->Answer  = (int)date;
            SendPac(mes, responsSocket, false);
        }
    }

    // Освобождение памяти
    fclose(TellsFile);
}

Почему-то после выполнения:

std::filesystem::create_directories(TellsAdress);

Обнуляется mes;

Answer 1

Вот такое

sprintf_s(TellsAdress, "%s%s", TellsAdress, "/info.cat");

не допускается.

Нельзя использовать один и тот же буфер и как буфер-получатель, и как одну из входных строк в sprintf[_s]

READ ALSO
Сколько раз функция может вызвать саму себя? C/C++

Сколько раз функция может вызвать саму себя? C/C++

Сколько раз функция может вызвать саму себя и от чего это зависит

258
Ошибка Thread 1: EXC_BAD_ACCESS (code=1, address=0x0) при компиляции

Ошибка Thread 1: EXC_BAD_ACCESS (code=1, address=0x0) при компиляции

Необходимо написать класс для работы с целыми знаковыми числами с использованием stl и виртуальных функций(С++03)

288
Аппаратный генератор случайных чисел

Аппаратный генератор случайных чисел

Нашел в интернете код, где используется аппаратный генератор случайных чиселХабр

260