c语言 - 我是否需要为未明确定义的指针分配内存?


int main(){
    struct Map map;
    readInMap(&map);
    return 0;
}
void readInMap(struct Map * map){
   //do stuff
}

因此,当我将映射地址作为参数发送过来时,我是否有某种内存分配错误的风险?我找不到与此相关的任何问题,因为我缺乏一些关于我正在做的事情的词汇。我还研究了内存分配,并希望个人参考一些可以很好地解释它与指针相关的内容。我在课堂上从来没有学到过

谢谢

编辑:我试图找出对我要执行的文件执行操作的最节省内存的方法。我在 c 中滥用指针,并找到了其他具有其他相关信息的线程来帮助我解决我要求的问题,例如 valgrind

没关系,您将 map 的地址(您在堆栈上创建)传递给 readInMap 函数。

struct Map map;行正在为您分配内存(在堆栈上),因此您有一个有效的struct来获取其地址。

传递堆栈中自动分配的变量的地址。这样做不会冒错误内存的风险。

你的代码很好。函数参数总是被复制的,因此原始变量可以保持不变。基本上在你的函数中,你会有一个名为struct Map* map的局部变量,它是指向地址的指针。当你用readInMap(&map);调用它时,你将map的地址复制到该局部变量struct Map* map,该变量将只存在于readInMap函数中。

您不会冒任何内存分配错误的风险。您不必初始化任何内容,因为您只有一个指针,仅此而已。

至于代码优化,这实际上是将结构作为参数传递的最佳方式,因为您只复制地址,而不是整个结构。我们再看一个例子:

typedef struct Node {
 char string[100];
 int variable1;
 int array[50];
} node; 

如果你用 void readInMap(node map) 声明你的函数,当你实际从 main 调用这个函数时(作为函数参数,你给结构变量,而不是指向结构的指针),函数 readInMap 会发生什么?正如我之前所说,scienes 背后发生的事情是这样的:函数将创建它自己的node map变量,并将您传递给该局部变量的参数中的所有值复制。所以在我写的这个结构中,它将不得不复制数组和变量,而这根本没有优化。

因此,您只需像以前那样使用 void readInMap(struct Map * map) 声明函数即可解决此问题。现在只复制地址,而不是整个结构,这是使用结构时的最佳优化。

相关内容

  • 没有找到相关文章

最新更新