gpt4 book ai didi

c++ - malloc 函数的段错误

转载 作者:行者123 更新时间:2023-11-30 03:43:47 27 4
gpt4 key购买 nike

我有一个脚本,它通过 SSH (libssh2) 连接到我的 10 台服务器中的一台。该程序使用 fork 作为线程系统。它正在进入服务器,执行命令(如 free -m 或检查 CPU USSAGE),并通过 HTTP REQUEST 将输出发送到另一台服务器。

它工作得很好,但有时它不会将数据发送回 HTTP 服务器。我用 puts('DEBUG123 ...') 做了一点调试,看看它崩溃的地方。我这样做是因为我使用 FORK 并且我看不到它在哪里崩溃。在那里你可以看到代码。

... code from the fork
puts("DEBUG 6");
sprintf(param,"%s%s",param,my_encode(info));
puts("DEBUG 6.5");
getContent(MY_HOST,HOST_IP,param);
puts("DEBUG 7");
... code from the fork

在将我的数据发送到 HTTP 服务器 之前加密我的数据的 my_encode 函数的代码:

char *my_encode(char* bytes_to_encode)
{
puts("S-DEBUG 1");
int in_len = strlen(bytes_to_encode);
puts("S-DEBUG 1.1");
char buf[5200];
char *res = (char *)malloc(3600);
puts("S-DEBUG 1.2");
memset(buf,0,1200);
puts("S-DEBUG 1.3");
memset(res,0,3600);
puts("S-DEBUG 2");

strcpy(buf,base64_encode(bytes_to_encode,in_len));

for(int i=0;i<strlen(buf);i++)
{
strcat(res,switch_encode(buf[i]));
}
puts("S-DEBUG 3");
return res;

}

这是我得到的输出:

Linux -> username password 1.2.3.4 22
DEBUG 2
DEBUG 3
DEBUG 4
DEBUG 5
DEBUG 6
S-DEBUG 1
S-DEBUG 1.1
S-DEBUG 1.2
S-DEBUG 1.3
S-DEBUG 2
S-DEBUG 3
DEBUG 6.5
DEBUG 7
DEBUG 1
-- SUCCESSFUL SEND

Linux -> username password 1.2.3.4 22
DEBUG 2
DEBUG 3
DEBUG 4
DEBUG 5
DEBUG 6
S-DEBUG 1
S-DEBUG 1.1
S-DEBUG 1.2
S-DEBUG 1.3
S-DEBUG 2
S-DEBUG 3
DEBUG 6.5
DEBUG 7
DEBUG 1
-- SUCCESSFUL SEND

Linux -> username password 1.2.3.4 22
DEBUG 2
DEBUG 3
DEBUG 4
DEBUG 5
DEBUG 6
S-DEBUG 1
S-DEBUG 1.1
S-DEBUG 1.2
S-DEBUG 1.3
S-DEBUG 2
S-DEBUG 3
DEBUG 6.5
DEBUG 7
DEBUG 1
-- SUCCESSFUL SEND

Linux -> username password 1.2.3.4 22
DEBUG 2
DEBUG 3
DEBUG 4
DEBUG 5
DEBUG 6
S-DEBUG 1
S-DEBUG 1.1 <--- HERE IT IS CRASHING
DEBUG 1
-- ERROR ON SEND

Linux -> username password 1.2.3.4 22
DEBUG 2
DEBUG 3
DEBUG 4
DEBUG 5
DEBUG 6
S-DEBUG 1
S-DEBUG 1.1
S-DEBUG 1.2
S-DEBUG 1.3
S-DEBUG 2
S-DEBUG 3
DEBUG 6.5
DEBUG 7
-- SUCCESSFUL SEND

Linux -> username password 1.2.3.4 22
DEBUG 2
DEBUG 3
DEBUG 4
DEBUG 5
DEBUG 6
S-DEBUG 1
S-DEBUG 1.1 <--- HERE IT IS CRASHING
DEBUG 1
-- ERROR ON SEND

据我了解,它在此处的 malloc 函数处崩溃:

char *res = (char *)malloc(3600);

这是我发送的基本信息:

username:password:1.2.3.4:22:Linux:Intel(R) Core(TM)2 Duo CPU E8200 @ 2.77GHz:242 238 3 0 15 64:no_server_load]

有时它会崩溃。

我还更改了行 char *res = (char *)malloc(3600); ,原来它是 char *res = (char *)malloc(1200);。我相信我没有足够的内存空间。

  1. 问题出在哪里?
  2. 我是否需要重写 my_encode 函数以使其不再崩溃?如果是,怎么办??

谢谢。

最佳答案

你必须做这样的事情(释放你的缓冲区):

#include <string>
void my_encode(char* bytes_to_encode, std::string& encoded) {
puts("S-DEBUG 1");
int in_len = strlen(bytes_to_encode);
puts("S-DEBUG 1.1");
char buf[5200];
char *res = (char *)malloc(3600);
puts("S-DEBUG 1.2");
memset(buf,0,1200);
puts("S-DEBUG 1.3");
memset(res,0,3600);
puts("S-DEBUG 2");

strcpy(buf,base64_encode(bytes_to_encode,in_len));

for(int i=0;i<strlen(buf);i++)
{
strcat(res,switch_encode(buf[i]));
}
puts("S-DEBUG 3");

encoded = res;
free(res);
}

void main() {
char *s = new char[32];
strcpy(s, "hello");
std::string str;
my_encode (s, str);
const char* result = str.c_str();
}

关于c++ - malloc 函数的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35873677/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com