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个字符串.
malloc 最终实际上可以分配超出预期的数量来维持对齐/简化分配器.
你正在做的是未定义的行为,除其他外,"未定义"可能意味着"工作,有时".不要这样做,因为其他选择并不是那么好.有些时候,它会崩溃.有些时候,它似乎工作,但事实证明你破坏了堆,并在稍后,使用或释放一些完全不同的分配,你将得到"莫名其妙"的数据或堆腐败相关的错误,这些都不是'以任何明显的方式与溢出相关联.
这是一个糟糕的主意,永远不要依赖于比你要求的更多的一个字节.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |