函数调用值内存泄漏

时间:2014-04-26 06:18:49

标签: c++ c compiler-construction interpreter

据我所知,调用CC++中的函数是按值调用,这意味着调用函数编译器会复制所有参数,然后将它们传递给函数体。 / p>

因此,由于许多参数复制和函数调用,是否可能面临内存泄漏?

2 个答案:

答案 0 :(得分:2)

问:由于许多参数复制和函数调用,是否可能面临内存泄漏?

A:直接,不,间接,是的。

假设你有两个struct

struct A
{
   A(int i) : data(new int(i)) {}
   A(const& copy) : data(new int(*copy.data)) {}

   // Forgot to add a destructor that deallocates
   // memory.

   int* data;
};

struct B
{
   B(int i) : data(i) {}
   int data;
};

当您创建和删除A的实例时,您正在泄漏内存。 B不会遇到这个问题。

如果将A的实例传递给函数,则会创建和删除对象,这将导致内存泄漏。如果你传递B的实例,那就不会有问题。

我想说的是,将对象传递给函数并制作副本时,这样做本身并不会导致内存泄漏。只有当存在与对象构造和删除相关的内存泄漏时,才会在函数中传递它们时看到内存泄漏。

答案 1 :(得分:0)

对于c,最大堆栈大小是有限的,所以你可以做到这一点使事情变得糟糕。

#define MAX_STACK_SIZE 0x10000000

struct test_s {
    char test[MAX_STACK_SIZE];
}

void func(struct test_s instance){
    //dothings
}

但是,没有人这样做,instand func就是这个

void func (struct test_s *instance_ref){
    //dothings
}