Почему возникает ошибка munmap_chunk(): invalid pointer?

Я начинающий в Си, не знаю пока многих тонкостей языка. Уже наверное больше часа не могу никак понять, где я нафейлил, возникает ошибка munmap_chunk(): invalid pointer:

#include <stddef.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

char *series_sum(const size_t n) {
  
  if(n == 0) {
    return "0.00"; // Btw 0 is not a natural number :)
  }
  
  float sum = 0;
  for(size_t i = 0; i < n; i++) { // It's simple but I don't care
    sum = sum + 1.0 / (1.0 + i * 3.0);
  }
  int d = sum > 1 ? (int)ceil(log10(sum)) : 1;
  char *s = malloc(sizeof(char) * (d + 4));
  sprintf(s, "%.2f", sum);
  return s;
}

Уже кучу раз всё перепроверил, вроде всё логично, проверял алгоритмы, выдаёт правильный результат, но иногда тест просто заваливается без указания причины.

Мне нужно вернуть форматированную строку, число и два знака после запятой.


Ответы (1 шт):

Автор решения: George Glebov

Этот вариант работает, без извращений в виде "0.00".

#include <stddef.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

char *series_sum(const size_t n) {
  float sum = 0;
  for(size_t i = 0; i < n; i++) { // It's simple but I don't care
    sum = sum + 1.0 / (1.0 + i * 3.0);
  }
  char *s = malloc(sizeof(char) * 5);
  sprintf(s, "%.2Lf", sum);
  return s;
}
→ Ссылка