简体   繁体   中英

allocating static memory for character pointer defined in struct in C

I have structure with char pointer. I want to allocate static memory to this struct member. How can I do this?

Example:

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

How to assign 10 bytes static memory to this char pointer? I know malloc to assign dynamic memory allocation. Is this Ok?

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

PS: I am not allowed to change this struct and use malloc to assign dynamic memory.

That will be even simpler (array decays to pointer automatically):

data.buf = buffer;

note that buffer must have an ever-lasting lifetime or you have to make sure that it's not deallocated (ie routine where it is declared returns) while you're using it or referencing it.

Allocating from a subroutine and returning will cause underfined behaviour because memory will be deallocated on return.

For instance don't do this (as we often see in questions here):

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

Bugs introduced by this kind of UB are nasty because the code seems to work for a while, until the unallocated buffer gets clobbered by another function call.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM