我编写了以下代码来解决代码战中的问题:
char *series_sum(unsigned long int n){
double sum=0;
static char a[10];
for(int i=1;i<=n;i++){sum=sum+1.0/(3*i-2);}
sprintf(a,"%.2lf",sum);
return a;
}
问题很简单,它只希望您打印序列的第n个部分和,并将其作为带2个小数点的字符串(“ a.bc”)返回。 但是我得到了错误:
munmap_chunk():无效的指针:0x00000000006031b1
编辑:这是测试功能的代码。
#include <criterion/criterion.h>
#include <stddef.h>
char *series_sum(const size_t n);
Test(ExampleTests, ShouldPassAllTheTestsProvided) {
{
const char *expected = "1.00";
char *received = series_sum(1);
cr_assert_str_eq(expected, received, "Expected: %s Received: %s", expected, received);
free(received); received = NULL;
}
{
const char *expected = "1.25";
char *received = series_sum(2);
cr_assert_str_eq(expected, received, "Expected: %s Received: %s", expected, received);
free(received); received = NULL;
}
{
const char *expected = "1.39";
char *received = series_sum(3);
cr_assert_str_eq(expected, received, "Expected: %s Received: %s", expected, received);
free(received); received = NULL;
}
}
答案 0 :(得分:0)
由于尚无关于您其他代码的信息,让我推测一下:调用代码的功能类似于:
field1
该免费电话尝试释放静态内容。您可以从malloc获得的指针上调用free。您不应该尝试在静态缓冲区上调用它。