Apache:在几篇文章之后,内容变得损坏

Apache:在几篇文章之后,内容变得损坏,c,apache,C,Apache,如果Apache是新重新启动的,那么前几次提交没有问题。但经过几次测试后,它开始打印出“v”的损坏版本 更新:也许我需要“免费(v);”?重置它使用的内存或其他东西。很明显,它被储存在某处。。。它需要清空 也许这与我在httpd.conf中的fcgi设置有关?fread()没有添加空终止符,您需要添加它 fread(v,content_len,1,stdin); v[content_len] = '\0'; 否则,printf()将打印字符串中超出读取范围的未初始化字符 您还应该确保v足够大,

如果Apache是新重新启动的,那么前几次提交没有问题。但经过几次测试后,它开始打印出“v”的损坏版本

更新:也许我需要“免费(v);”?重置它使用的内存或其他东西。很明显,它被储存在某处。。。它需要清空

也许这与我在httpd.conf中的fcgi设置有关?

fread()
没有添加空终止符,您需要添加它

fread(v,content_len,1,stdin);
v[content_len] = '\0';
否则,
printf()
将打印字符串中超出读取范围的未初始化字符

您还应该确保
v
足够大,可以容纳内容。您可以执行以下操作,而不是硬编码尺寸:

char v[content_len+1];

您不需要
free(v)
,因为
free()
只能与
malloc()
calloc()
realloc()
返回的指针一起使用

content\u len
是否小于100?它有时会打印上一次提交的值。不,您不需要释放
v
,事实上您不能这样做
free()
必须仅应用于指向动态分配内存块开头的指针。此外,您应该并且必须使用
size\t bytes\u read=fread(v,1,content\u len,stdin)
并使用返回的值-不能保证
fread
返回以nul结尾的字符串。还可以交换1,content\u len;将结果存储在变量中,并确保不会出现短读。。。
char v[content_len+1];