首页 > 解决方案 > C segfault - off-by-one - 大小为 1 的无效写入

问题描述

我在 C 中的内存分配方面遇到了一些问题。

我似乎总是在这里写或读到错误的地方,可能我在这里遗漏了一些东西:

char *a = malloc(8+b+1+c+1+d+1+e+1+f+4+6);
*(a+8+b+1+c+1+d+1+e+1+f+4+6) = '\0';

snprintf(a, strlen(a), "xyz    \"%sx%sx%sx%sx%s\"     ",v, w, x, y, z);

谁能帮我回到正轨?

标签: cmalloc

解决方案


我不知道这些变量是什么,但我认为这一行是错误的:

*(a+8+b+1+c+1+d+1+e+1+f+4+6) = '\0';

试试这个:

*(a+8+b+1+c+1+d+1+e+1+f+4+6-1) = '\0';

写入字符串的末尾需要您从长度中减去一个以获取最后一个字节的索引。

根据 v、w、x、y 和 z 的字符串长度,您还可能在使用snprintf.


推荐阅读