变量可以在设置之前使用

use*_*000 1 c malloc memory-management initialization

创建指向结构的指针时,出现“在设置变量之前可以使用变量”的信息example *e。如果我改用变量example e,则不会收到错误消息。这是因为我没有为指针分配内存吗?

typedef struct example {
    int a;
}example;

void test (){

    example *e;
    e->a=1;
    printf_all("val %d",e->a);
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 5

指针的值不确定。结果,程序具有不确定的行为。

您应该为example将要写入数据的类型的对象分配内存。例如

example *e = malloc( sizeof( *e ) );
e->a = 1;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当不再需要内存时,您应该释放它。

要么

example obj;
example *e = &obj;
e->a = 1;
Run Code Online (Sandbox Code Playgroud)


dte*_*ech 5

e不指向任何东西。您正在使用未初始化的指针。您通过无效指针“设置”,然后尝试访问它。

您的指针应该指向一个example实例。例如:

example exampleInstance;
example * examplePointer = &exampleInstance;
Run Code Online (Sandbox Code Playgroud)