请教一个关于c++DLL供C#调用的代码,是否会出现内存泄漏的问题

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本身就没有了,所以你的代码会导致访问到无效的内存,而不是内存泄漏。