返回char*给c#调用的问题

hrtc 2006-12-30 10:55:00
1.char p[10];和char* p = new char(10);
2者的区别,是不是前者自动分配内存,后者必须自己释放内存
2.看看下面这个程序,返回的p2由inet_ntoa这个函数返回的字符串,需不需要delete释放内存?
//获得局域网IP地址
char* __stdcall getLocalIP()
{
// TODO: Add your control notification handler code here
WORD wVersionRequested;
WSADATA wsaData;

//Start up WinSock
wVersionRequested = MAKEWORD(1, 1);
WSAStartup(wVersionRequested, &wsaData);

hostent *p;
char s[128];
char *p2;

//获得计算机名字
gethostname(s, 128);
p = gethostbyname(s);

//获得IP地址
p2 = inet_ntoa(*((in_addr *)p->h_addr));

WSACleanup();

return p2;
}
3.下面这个程序直接用char name[255],是不是就不用释放了?
//获得计算机名称
char* __stdcall getHostName()
{
// TODO: Add your control notification handler code here
WORD wVersionRequested;
WSADATA wsaData;
char name[255];
// CString ip;
// PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 2, 0 );

if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{
gethostname(name, sizeof(name));
WSACleanup();
}

return name;
}
4.下面这个,在c#里最后几个字母是乱码,但是如果把TCHAR username[100]设为全局变量的话,则正确,估计是因为char数组自动回收调了部分内存。请高手指教。
//获取网络用户名称
char* __stdcall getUserName()
{
// TODO: Add your control notification handler code here
TCHAR username[100];
DWORD size1 = 100;

GetUserName(username,&size1);
username[size1] = 0;
return username;
//如用下面的话返回正确,但没释放内存
//char* p = new char(size1);
//strcpy(p,username);
//return p;

}
希望大家一起讨论一下。
...全文
440 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2006-12-30
  • 打赏
  • 举报
回复
inet_ntoa,必须看你所处系统的帮助文档。windows下是没问题,它使用的是线程专属存储区作为静态buffer,无须释放。vxworks就内部使用malloc的,会内存泄漏,它要求用inet_ntoa_b代替。
hrtc 2006-12-30
  • 打赏
  • 举报
回复
我知道c#中怎么调用,但是调用有问题,看一下我上面写的4个例子,就知道了。我想了解的是c++内存分配究竟是如何的。主要就2个问题,new 出来的char要不要释放(不要的话会不会内存泄露),还有就是第4个例子中自动分配的char数组到了c#中,似乎被回收了,显示出乱码,把username设成全局变量后就不会。
caocheng8230 2006-12-30
  • 打赏
  • 举报
回复
做成一个连接库,动态或者静态都可以,然后C#去调用

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧