内存分配给char *

时间:2016-07-17 06:06:39

标签: c++ c

我想了解为什么这段代码不会崩溃:

iter

我虽然写的是不是过程的记忆。因为我们只为char *分配了1个字节,而且我们写的不止这些。

有人可以解释一下吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

为字符串分配足够的空间。

#include <stdio.h>
#include <string.h>
int main()
{
    char * a;
    a = (char *)malloc(32);
    strcpy(a, "example");
    free(a); // don't forget to free
}

<强>解释

  • 您分配了1个字节,复制了7 + 1(example + '\0')。
  • 您试图访问未分配的内存。

阅读有关缓冲区溢出的文章。

重要:

如果您不知道输入大小(现在我们知道&#34;示例&#34;是7 + 1字节) 您应该使用strncpy来指定可以复制的最大字节数。

有一个函数strdup复制字符串。与allocation + strcpy相同。

答案 1 :(得分:2)

您的分配器可能会为低于特定阈值的请求分配固定大小的小块。我不会感到惊讶你有8个字节,所以strcpy无故障地工作