Dra*_*orn 7 c memory-management
假设你有 -
struct Person {
char *name;
int age;
int height;
int weight;
};
Run Code Online (Sandbox Code Playgroud)
如果你这样做 -
struct Person *who = malloc(sizeof(struct Person));
Run Code Online (Sandbox Code Playgroud)
C如何知道为name变量分配多少内存,因为这可以容纳大量的数据/字符串?我是C的新手并且对内存分配感到困惑.
它不会知道,您必须单独为其分配内存。
struct Person *who = malloc(sizeof(struct Person));
Run Code Online (Sandbox Code Playgroud)
分配足够的内存来存储 类型的对象Person。
在Person对象内部,成员name仅占据相当于指向 的指针大小的空间char。
上面malloc只是分配了那么多空间,为了能够对成员指针执行任何有意义的操作,您必须单独为其分配内存。
#define MAX_NAME 124
who->name = malloc(sizeof(char) * MAX_NAME);
Run Code Online (Sandbox Code Playgroud)
现在该成员name指向124堆上大小为字节的动态内存,并且可以进一步使用它。
另外,在使用完成后,您需要free明确记住它,否则最终会导致内存泄漏。
free(who->name);
free(who);
Run Code Online (Sandbox Code Playgroud)