Home > Mobile >  Do we need to initialize the pointers inside struct
Do we need to initialize the pointers inside struct

Time:03-20

We have pointers inside a struct, do we need to initialize the pointers inside the struct?

I have tried the code below, include this sentence below or not, the code all run well. (Could some experts give help here? and I read some code, and found seems sometimes initialized, sometimes not, so confused and search/ask here.)

The answer in this link seems not mentioned initialize this pointer inside struct. initializing-a-member-of-a-structure-with-pointers-c

#include "stdio.h"
#include "stdlib.h"

struct part{
    int num;
    char *name;
};

int main()
{
    struct part *p = (struct part*)malloc(sizeof(struct part));

    //Include this or not, this code all run well
    p->name = (char*)malloc(sizeof(char)); 

    p->num = 1;
    p->name = "ss";

    printf("%d, %s\n", p->num, p->name);

    return 0;
}



CodePudding user response:

No, you should not do that, you are creating a memory leak, because you allocate memory and then forget the pointer value and don't free it.

To remove the memory leak:

p->name = malloc(1); //sizeof char is 1 by definition, and cast not needed
free(p->name);
p->name = "ss";

However, if you look at that, it should be clear that allocating 1 byte of memory, then immediately freeing it, is pointless.


Perhaps you want a copy of the string?

const char *initdata = "ss";
p->name = malloc(strlen(initdata) 1);
strcpy(p->name, initdata);
// Remember to free this at some point

Alternatively, you could use initialize with the string literal, but then you should have const char pointer because string literals are read-only:

struct part{
    int num;
    const char *name;
};
  •  Tags:  
  • c
  • Related