2017-02-28 41 views
2

我有结构与字符指针。我想为这个结构成员分配静态内存。我怎样才能做到这一点?分配静态内存的结构中定义的字符指针在C

实施例:

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

如何分配10个字节的静态存储器这个字符指针?我知道malloc分配动态内存分配。这个可以吗?

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

PS:我不允许改变这个结构并使用malloc来分配动态内存。

+0

通过静态你的意思是它应该坚持你的程序的整个运行时?你做的是合法的,但是否正确取决于你的应用需求。 – StoryTeller

+0

谢谢@StoryTeller。 – mehtame026

回答

3

这将是更简单(阵列衰减到自动指针):

data.buf = buffer; 

注意buffer必须有一个历久不衰的生命周期,或者你必须确保它不释放(即常规它在哪里声明退货),而您正在使用它或引用它。

从子程序分配和返回将导致未定义的行为,因为内存将在返回时解除分配。

例如做到这一点(因为我们经常在问题请参见这里):通过这种UB介绍

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 

错误是讨厌,因为代码似乎工作了一段时间,直到未分配的缓冲区被另一个函数调用破坏。

+0

感谢@Jean的解释。我明白了你的观点。 – mehtame026