const char* __stdcall abc(const char* data) {
int size = strlen(data);
string s = "";
for (int i = 0; i < size; i++) {
s += data[i];
}
return s.c_str();
}
本人做c#,现在需要用c++实现一些内容,传入参数和返回参数都是指针,在c++的DLL中,定义了一些变量,在C#中我通过Intptr来获取返回值,上面的函数模拟了大概的内容,对c++中内存泄漏问题没有经验,这样在c#调用,会造成内容泄漏问题么,c#中的Intptr是不需要释放的吧
这样会有问题的,用类似windows api的形式吧,如下
//参数:data 数据
// buff 写缓冲
// bsz 写缓冲最大长度
//例子:C#
// string data = "xxxxxx";
// string buff[1024]
// abc( data, buff, 1024 );
void __stdcall abc( const char* data, char* buff, int bsz )
{
int size = strlen(data);
if( size > bsz )size = bsz;
for (int i = 0; i < size; i++)
{
buff[i] = data[i];
}
}
var myp = {
mp: "",
mfun: fillSec
};
function fillSec(pm) {
alert(pm);
};
document.domain = "csdn.net";
var proxy_url = "http://internalapi.csdn.net/proxy.html";
var ajaxProxyCaches = {};
function ajaxProxy(proxyUrl, opts) {
var c = ajaxProxyCaches[proxyUrl];
if (c === undefined) {
c = ajaxProxyCaches[proxyUrl] = [];
var func = arguments.callee;
$('').load(function () {
c.contentWindow = this.contentWindow;
func(proxyUrl, opts);
}).prependTo('body');
} else if (c.contentWindow === undefined) {
c.push(opts);
} else {
do {
c.contentWindow.jQuery.ajax(opts);
} while (opts = c.shift());
}
}
之所以内存泄漏是因为你分配了内存但是没有得到回收
你的代码不会发生内存泄漏,因为string定义在堆栈上,并且string的析构函数会回收数组的空间。
但是因为出了函数,string本身就没有了,所以你的代码会导致访问到无效的内存,而不是内存泄漏。