【发布时间】:2019-07-31 05:01:28
【问题描述】:
我正在编写一个简短的方法来获取达尔文的 MAC 地址。但是,我不断收到以下错误消息:
malloc: can't allocate region
*** mach_vm_map(size=3907498536060022784) failed (error code=3)
malloc: *** set a breakpoint in malloc_error_break to debug
我认为这是由于内存泄漏造成的。
我尝试通过引用传递char* addr 变量,但没有成功。
我的方法是:
char* getPhysicalAddress() {
char* addr;
#ifdef __APPLE__
FILE *fp = popen("ifconfig en0 | awk '/ether/{print $2}'", "r");
if (fp != NULL) {
fscanf(fp, "%s", addr);
pclose(fp);
}
else {
addr = "[unknown]";
}
#endif
#ifdef __linux__
FILE* file = popen("cat /sys/class/net/eth0/address", "r");
if (file != NULL) {
fscanf(file, "%s", addr);
pclose(file);
}
else {
addr = "[unknown]";
}
#endif
return addr;
}
在我的主函数中,我使用char* addr = getPhysicalAddress(); 调用该函数。
如何解决此方法中的内存泄漏问题?
【问题讨论】:
-
你能用
std::string代替原始的char*吗? -
这个问题有 0 个 C++ 代码。然后,这就是您的问题,您使用的是未初始化的原始指针。指针指向某个随机区域,您使用未初始化的原始指针调用 fscanf (这是一个不安全的函数)。然后 Fscanf 将某些内容读取到某个地方,从而破坏了您的记忆。非常简单的解决方案:不要使用原始指针。从来没有,无处可去。
-
您应该使用 C 编码或更改您的代码以匹配 C++ STL
标签: c++ memory-leaks