2017-06-27 51 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''''''''''''''超载将是一个更好的主意。 –