Ошибка сегментации при звонке бесплатно - PullRequest
0 голосов
/ 02 мая 2020

Я сделал маленький сервер в c. У меня есть segfault, когда я звоню бесплатно после нескольких подключений, но я не могу выяснить, откуда оно.

Вначале я думал, что оно пришло из reallo c, но даже когда он не вызывается, у меня есть segfault.

for (;;) {
        if ((client = accept(sock, NULL, NULL)) < 0) {
            err(EXIT_FAILURE, "Failed to accept client");
        }

        totalBytes = 0;
        int size = 2048;

        char* tmp = malloc(sizeof(char) * size);

        if (tmp == NULL) {
            err(EXIT_FAILURE, "Failed to malloc");
        }

        while ((r = read(client, buffer, BUFFER_SIZE)) > 0) {
            totalBytes += r;

            if (totalBytes >= size) {
                size += totalBytes - size + 1;
                tmp = realloc(tmp, sizeof(char) * size);

                if (tmp == NULL) {
                    err(EXIT_FAILURE, "Failed to realloc");
                }
            }

            buffer[r] = '\0';
            strcat(tmp, buffer);

            ioctl(client, FIONREAD, &r);

            if (r <= 0) {
                break;
            }
        }

        char http_request[size];

        strcpy(http_request, tmp);
        free(tmp);
}

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 02 мая 2020

Как сказал Кейлум, это решит мою проблему

tmp[0] = '\0';

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...