makeedge()返回的内存类型是静态类型还是动态类型?

时间:2017-06-07 11:59:04

标签: c++

makedge函数中的内存分配类型是什么?

#include<iostream>
#include<stdio.h>

using namespace std;

struct edge
{
    int a;
    int b;
    edge(int a, int b)
    {
        this->a=a;
        this->b=b;
    }
};

edge makedge(int a, int b)
{
    return edge(a, b);
}

int main(void)
{
    edge e=makedge(5 , 6);
    printf("%d %d\n", e.a, e.b);
}

当我尝试使用delete(&e)释放内存时。错误是

Error : double free or corruption (out): 0x00007fff6aee5d30 ***

在geeksforgeeks在线编译器中。

1 个答案:

答案 0 :(得分:1)

您的计划中没有动态分配。

您的所有对象都有自动存储时间

因此,deletefree他们非常糟糕。

因此出现错误信息。

return edge(a, b);

这里你返回了一个临时,一个没有名字的对象......但它没有动态分配。

与以下内容完全不同:

edge myObject(a, b);
return myObject;