2017-06-07 52 views
-1

makedge函數中的這種內存分配是什麼類型?makeedge()返回的內存類型是靜態還是動態類型?

#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在線編譯器。

+5

?這聽起來像你可以使用[良好的C++書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – NathanOliver

+0

只有'刪除'你'新',和'刪除[]'你'新的[]''。 –

回答

0

程序中沒有動態分配。

所有的對象都有自動存儲時間

因此,delete ing或free它們非常糟糕。

因此,錯誤消息。


return edge(a, b); 

在這裏,您返回臨時,沒有名字和hellip的對象;但它不是動態分配的。

這不是來自完全不同:你爲什麼要使用`free` /`delete`當你從未使用過`* alloc` /`new`

edge myObject(a, b); 
return myObject;