c - 我给 malloc 什么参数有什么关系?

标签 c malloc

<分区>

C 菜鸟在这里。当我稍后可以将任何大小的字符串传递给 malloc 时,我给 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;
}

这很好用。根据我对 malloc 应该是什么的理解,我原以为我不能在 str 中存储超过 1 个字符。

最佳答案

malloc 最终可能会分配比预期更多的实际分配以保持对齐/简化分配器。

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

这是一个糟糕的想法,永远不要依赖比您请求的多一个字节。

关于c - 我给 malloc 什么参数有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40933988/

相关文章:

c - 这个汇编语句是什么意思?

不能对 'double' 数字进行乘法运算

c - 不同的数据类型 : how to store them all in one string and how to allocate dynamic memory to it?

C:返回一个指向内存数据的函数

c - 如何使用指针在 C 中的第一个空格上分割字符串?

c - 尝试输入一个结构,第一次很好用,第二次就崩溃了

c - udp 在同一个套接字上发送和接收

c++ - 杀死焦点并不是杀死焦点

c - Valgrind 和释放特殊指针数组

c - 将 unsigned long 转换为字符串的缓冲区大小