gpt4 book ai didi

c - 动态分配并返回局部变量

转载 作者:行者123 更新时间:2023-11-30 14:23:52 25 4
gpt4 key购买 nike

在这段代码中,我试图创建一个包含输入文件中所有字符的列表,我的主要问题是“你不能返回函数的局部变量”这句话被告知这让我很困惑。我动态分配了一个List并返回它,我可以只定义List列表而不动态分配并返回它吗?我相信这很糟糕,因为所有信息都会被自动删除,我只会留下我创建的原始列表的地址。

以下是更多信息的代码:

typedef struct Item {
char tav;
struct Item* next;
} Item;

typedef struct List {
Item* head;
} List;

List* create(char* path) {
FILE* file;
List* list;
Item* trav;
Item* curr;
char c;

file=fopen(path, "r");
if (file==NULL) {
printf("The file's not found");
assert(0);
}

if (fscanf(file, "%c", &c)!=1) {
printf("The file is empty");
assert(0);
}
trav=(Item *)calloc(1, sizeof(Item));
trav->tav=c;
list=(List *)calloc(1, sizeof(List)); /* allocating dynamiclly the list so it won't be lost at the end of the function*/
list->head=trav;

while (fscanf(file, "%c", &c)==1) {
curr=(Item*)calloc(1, sizeof(Item));
curr->tav=c;
trav->next=curr;
trav=curr;
}
trav->next=NULL;

fclose(file);

return list;

}

我说得对吗?有这个必要吗?我可以定义 List 而不是一个指向它的指针并返回它吗?

最佳答案

您不能返回指向函数局部变量的指针。局部变量不会超出函数的作用域({,})。
返回函数本地变量的地址将给您带来所谓的未定义行为

您完全可以返回:

  • 按值或局部变量
  • 指向动态分配内存的指针

优先选择第一个,除非您真的担心由于返回副本而导致内存过多。

can I just define List list without a dynamic allocation and return it?

是的,
前提是你有:

List create(char* path); 

关于c - 动态分配并返回局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12458251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com