2

我正在学习 C,我正在尝试执行以下操作:

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

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

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

table* create_table() {
  table o;
  return &o;
}

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

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

4

2 回答 2

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;
}
于 2012-05-15T13:40:18.357 回答
2

您不能返回局部变量的地址。它在函数退出时被释放。您必须使用 malloc 分配它并返回该指针。例如:

table* ptr = malloc(sizeof(table));
memset(ptr, 0, sizeof(table));
return table;
于 2012-05-15T13:41:41.043 回答