我给malloc的论点有什么关系?

use*_*259 1 c malloc

C noob在这里.当我以后可以传递任何大小的字符串时,我给malloc什么参数有什么关系?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char *str;
    str = malloc(1*sizeof(char));
    strcpy(str, "abcd");
    printf(str);
    printf("\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这很好用.我原本以为我无法在我对malloc应该是什么的理解中存储超过1个字符串.

Sha*_*ger 5

malloc 最终实际上可以分配超出预期的数量来维持对齐/简化分配器.

你正在做的是未定义的行为,除其他外,"未定义"可能意味着"工作,有时".不要这样做,因为其他选择并不是那么好.有些时候,它会崩溃.有些时候,它似乎工作,但事实证明你破坏了堆,并在稍后,使用或释放​​一些完全不同的分配,你将得到"莫名其妙"的数据或堆腐败相关的错误,这些都不是'以任何明显的方式与溢出相关联.

这是一个糟糕的主意,永远不要依赖于比你要求的更多的一个字节.