【发布时间】:2021-02-14 10:48:00
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
struct Test {
const char *str;
};
void test_new(Test *test) {
char *s = malloc(100);
s[0] = 'H';
s[1] = 'i';
s[2] = '\0';
test->str = s;
}
int main(void) {
struct Test test;
test_new(&test);
puts(test.str);
free(test.str);
return 0;
}
这是允许的吗?将结构成员分配给test_new 函数中的局部变量(字符指针)? (test->str = s 是否允许?)
我听说数组变量,当它是本地的时候,在函数结束后被释放。我想知道这是否适用于内存分配的局部变量。
像这样:
char *test(void) {
char s[100];
return s;
}
s 将在函数结束时消失,所以我想知道这是否适用于我的结构,尤其是我没有返回,而是更改了一个成员。
将结构成员指针(test->str)分配给另一个动态内存分配的指针(s)是否安全?
【问题讨论】:
标签: c pointers memory struct scope