首页 文章

为C中struct中定义的字符指针分配静态内存

提问于
浏览
2

我有char指针的结构 . 我想为这个struct成员分配静态内存 . 我怎样才能做到这一点?

例:

struct my_data {
    int x;
    bool y;
    char *buf;
 };

如何为此char指针分配10个字节的静态内存?我知道malloc分配动态内存分配 . 这个可以吗?

struct my_data data;
char buffer[10];
data.buf = &buffer[0];

PS:我不允许更改此结构并使用malloc分配动态内存 .

1 回答

  • 3

    这将更简单(数组自动衰减到指针):

    data.buf = buffer;
    

    请注意 buffer 必须具有持续的生命周期,或者您必须确保's not deallocated (i.e. routine where it is declared returns) while you'正在使用它或引用它 .

    从子例程分配并返回将导致未定义的行为,因为内存将在返回时被释放 .

    例如,不要这样做(正如我们在这里经常看到的那样):

    struct my_data foo()
    {
    struct my_data data;
    char buffer[10];
    data.buf = &buffer[0];
    return data;
    }
    int main()
    {
       struct my_data d = foo(); // buffer is already gone
    

    由这种UB引入的错误是令人讨厌的,因为代码似乎工作了一段时间,直到未分配的缓冲区被另一个函数调用破坏 .

相关问题