<分区>
我编写了一个函数来将项目添加到我的日志文件中。变量 loglevs[]
和 des
加起来超过 30 个字符(到目前为止)。当我使用下面的函数时,一切正常。
char *logitem (int loglev, const char *des) {
extern const char *loglevs[];
char *lld; // loglevel & description total 28 characters (7+1+20)
lld = (char *) malloc((29) * sizeof(char));
snprintf(lld, 29, "[%5s] %s", loglevs[loglev], des);
return lld;
}
但是,当我使用 malloc(24)
而不是 malloc(29)
时,出现以下错误:
root@vm:/home/geohei/devel# prog
*** Error in `prog': malloc(): memory corruption: 0x0000000000853330 ***
Aborted (core dumped)
我原以为会在 malloc(28)
处得到错误。为什么它只显示在 malloc(24)
?实际上,我可以在错误弹出之前转到 malloc(25)
。
我多次确认测试。