创建一个初始化结构并返回指针的C函数

hel*_*loc 2 c arrays pointers

我正在学习C,我正在努力做到以下几点:

  • table从函数创建结构
  • 返回pointer新创建的table

table的typedef: typedef char table [8][8];

所以,我创建了这个函数:

table* create_table() {
  table o;
  return &o;
}
Run Code Online (Sandbox Code Playgroud)

但我从编译器得到一个错误,说我正在返回一个局部变量的地址.

如何table从函数创建一个然后返回指针.

MBy*_*ByD 8

您无法返回局部变量的地址,因为函数(create_table)返回的地址变为无效,而您应该在堆上创建它:

table* create_table() 
{
    table * o;
    o = malloc(sizeof(table));
    // Edit - added initialization if allocation succeeded.
    if (o != NULL)
    {
        memset(o, 0, sizeof(table));
    }
    return o;
}
Run Code Online (Sandbox Code Playgroud)

  • ...你应该在你的`create_table`函数顶部的注释中记录(你确实在那里有一个注释,对:-))(a)如果它无法分配内存,函数可能会返回NULL,并且(b) )当函数不再需要时,函数的调用者负责在返回的`table`上调用`free`. (2认同)