Я сделал маленький сервер в 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);
}
Спасибо за вашу помощь.