gpt4 book ai didi

c - 在整个函数中保留 C 内存

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:54 25 4
gpt4 key购买 nike

假设我有一段类似这样的代码:

SOMESTRUCTURE *info;
info = malloc(sizeof(SOMESTRUCTURE));

while(something...)
{
info->mini[0] = malloc(sizeof(SOMESTRUCTURE *)); // It's a structure inside the same structure
while(something...)
{
info->mini[x]->name = malloc(sizeof(char *)*strlen(name));
printf("%s\n", info->mini[0]->name); // This prints out the correct value
}
}

printf("%s\n", info->mini[0]->name); // But now the value is lost and is null

如何让 info->mini[0]->name 值应用到整个函数中?

最佳答案

不,您应该仍然可以使用它。如果 xwhile 循环的迭代之一中为 0,或者执行 malloc,则可能会丢失该值的唯一方法在不进入内循环的情况下进入外循环 - 很难判断这是否可能,因为在这两种情况下您都没有指定 something 是什么。

的确,在某个范围内创建的变量会在您退出该范围时消失,但这里不是这种情况。分配的内存将在范围更改后继续存在。在这种情况下,指向该内存的给定 指针 可能不是您的指针(当您退出外部 while 语句时,info 仍在范围内)。

我确实看到了另一个潜在的问题 - 你的 malloc(sizeof(char *) * strlen(name)) 应该是 malloc(strlen(name) + 1)(因为 sizeof(char) 始终为 1)。它可能会起作用,因为 char * 通常会比 char 大,但这样做仍然是错误的方法。

但是,我在您的代码中看不到您实际设置 info->mini[0]->name 的任何地方,所以我不知所措它如何能有一个正确的值,除非它以某种方式从以前的 malloc 中获取一个值(这是可能的,因为 malloc 本身不需要清除它的内存给你)。

您应该发布您的实际代码或最好是出现问题的最小代码段。

关于c - 在整个函数中保留 C 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4030646/

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