【发布时间】:2013-12-23 06:45:37
【问题描述】:
程序是用 C 语言编程并用 GCC 编译的。
我试图帮助一个朋友,他试图使用尝试(浅)复制传递给函数的值。他的值是一个包含原语和指针(没有数组或缓冲区)的结构。由于不确定 malloc 是如何工作的,他使用它的方式类似于以下操作:
void some_function(int rand_params, SOME_STRUCT_TYPEDEF *ptr){ SOME_STRUCT_TYPEDEF *cpy; cpy = malloc(sizeof(SOME_STRUCT_TYPEDEF));// 这行有区别?!?!? cpy = ptr;// 无论如何都会覆盖 cpy,对吗? //打印记录为char *的结构中的值, //抱歉暂时找不到文档 }我告诉他 malloc 不应该影响程序,所以告诉他把它注释掉。令我惊讶的是,malloc 导致了与 malloc 注释掉(打印我们的垃圾值)的实现不同的输出(带有一些预期的字符串)。传递给 this 函数的指针来自其他一些我目前没有文档的库函数。我可以假设最好的指针是一个实际上是缓冲区(在堆栈上)的值。但我仍然不明白 malloc 是如何造成这种差异的。有人可以解释一下 malloc 是如何造成差异的吗?
【问题讨论】:
-
基于孤立的 sn-p 代码,您是正确的:
malloc不应该有所作为。但是根据您对问题的描述,受此影响的其他地方肯定有不好的事情发生。 -
确实需要看更多的功能。
cpy = ptr;写过头了,使cpy = malloc(sizeof(SOME_STRUCT_TYPEDEF));一文不值。还有其他问题。 -
如果没有产生问题的可编译示例,真的很难说。
标签: c pointers memory-management malloc