在linux中分配内存的问题
problem in allocating memory in linux
我用星号标记了产生问题的两行。
第一行为日志文件分配内存,这将在第二个带符号的行中使用。在第二签名行有一个分割错误的问题。这是由于没有分配"logfile"造成的。我确信这一点,因为如果我在load()中分配内存,它就会起作用。然而,我想在类的构造函数中分配内存,而不是在方法load()中。
我不明白为什么它不工作!这是我第一次在linux上,所以也许我做错了什么!
谢谢你,马可
server::server(){
port = 0;
serverup = 0;
loaded = 0;
logfile = (char *) malloc(SERVER_PATHS_SIZE*sizeof(char)); //****************************
}
int server::load(int in_id, char *in_name, char *in_ip, int in_port,
char *in_rcon, char *in_logfile){
int err;
sprintf(name, "%sx00", in_name);
sprintf(ip, "%sx00", in_ip);
port = in_port;
sprintf(rcon, "%sx00", in_rcon);
sprintf(logfile,"%sx00", in_logfile); //**********************************
err = urt.set(ip, port, rcon);
if(err < 1){
printf("server::load(): error from urt.set()n");
return 0;
}
printf("server::load(): server %d loaded!n", id);
loaded = 1;
return 1;
}
我认为您正在尝试取消in_logfile
和in_rcon
这对printf不起作用,因为printf 首先需要以null结尾的字符串作为%s的参数。
charptr[known_length] = 0
相反,这肯定不是答案,但是用c++开发将帮助您避免使用带类的C代码所遇到的内存问题。
使用std::string,那么复制它们将是微不足道的(与sprintf相比),并且它将更加安全。使用已弃用的char*会使事情变得混乱。
一个很好的副作用是您不需要手动分配内存(使用malloc或new),并且消除了内存泄漏的风险。
-
我没有看到server类的析构函数。你有一个释放内存的析构函数吗?
-
我没有看到创建和使用服务器对象的代码。是否可能是您创建了服务器对象,但随后对其进行了复制,并且由于没有正确实现复制语义而出现问题?
相关文章:
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 为什么瓦尔格林德在不释放恶意内存后没有报告任何问题?
- 包含矢量指针的结构的内存释放问题
- 在函数中分配内存时出现问题
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- 释放内存(主题模板)时出现问题
- C++ 中 std::vector 的内存问题
- C++ DLL 堆内存分配问题
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 字符 * 未从重载运算符或内存管理问题正确返回
- delete[]有问题,如何部分删除内存
- 内存泄漏问题
- 指向动态内存中结构中的变量时出现问题
- c++中的内存管理问题
- C++堆栈内存管理问题
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- JNA 参数问题:内存访问无效
- boost的问题::内存映射~500MB,外部USB文件