2017-06-27 81 views
1

struct S1{...}; 

extern "C" struct S1 *f(); 

extern "C" void freeS1(struct S1 *ptr); 

a.cpp

extern "C" struct S1 *f() { 
    struct S1 *ptr = new struct S1(); 
    ... 
    return ptr; 
}; 

extern "C" void freeS1(struct S1 *ptr) { 
    delete ptr; 
}; 

BC

struct S1 *ptr = f(); 
..... 
freeS1(ptr); 
+1

我還是不明白你在問什麼。 – Gnqz

+2

你忘了問一個問題 –

+1

你已經兩年多了,顯然還沒有閱讀[幫助頁面](http://stackoverflow.com/help),特別是名爲[「什麼我可以問這些話題?「](http://stackoverflow.com/help/on-topic)和[」我應該避免問什麼類型的問題?「](http://stackoverflow.com/help/dont -問)。或[採取旅遊](http://stackoverflow.com/tour)或[閱讀關於如何提出好問題](http://stackoverflow.com/help/how-to-ask)。 –

回答

6

內存是,它不分配使用的數據結構中的任何副作用的C代碼哪個分配器提供它並不重要,只要它正確對齊,分配和釋放函數正確匹配(以及stru cture的定義是一樣的)。應該沒有問題。

+0

當新扔一個exeption時會發生什麼? – 12431234123412341234123

+0

執行依賴,標準不關注外部堆棧幀。但通常情況下,即使平臺自身處理好展開(例如Windows上的VC++,其中C++異常是SEH上的螺栓),通常C代碼並不期望它有異常,但您不希望有異常遍歷C代碼。所以,我想說的是,調用nothrow''''''''''''''超載將是一個更好的主意。 –