gpt4 book ai didi

c - gsoap 和资源管理

转载 作者:行者123 更新时间:2023-11-30 16:55:27 25 4
gpt4 key购买 nike

我使用 gsoap 在我的 C 程序中实现一些 Web 服务。

我像这样使用gsoap:

int motion_detector_check_status(const char *endpoint, 
const motion_detector_subscription_result_t *sr, int *status) {
int rc = EXIT_SUCCESS;
double _timeout = difftime(sr->termination_time, sr->current_time);
char timeout[TIMEOUT_MAX_LEN];
struct soap *soap = soap_new();
struct _tev__PullMessages request;
struct _tev__PullMessagesResponse response;
char *motion_state;

if (!soap) return EXIT_FAILURE;

snprintf(timeout, TIMEOUT_MAX_LEN, "PT%.0fS", _timeout < 5.0 ? _timeout : 5.0);

request.MessageLimit = 1;
request.Timeout = _timeout < 5.0 ? (int64_t)_timeout : 5.0;
request.__any = timeout;
request.__size = sizeof(timeout) + 1;

rc = soap_call___tev__PullMessages(soap, endpoint, SOAP_ACTION_PULL_MESSAGE,
&request, &response);

if (rc != SOAP_OK) {
soap_print_fault(soap, stderr);
goto end;
}

if (response.wsnt__NotificationMessage &&
response.wsnt__NotificationMessage->Topic &&
response.wsnt__NotificationMessage->Topic->__any) {
if (strstr(response.wsnt__NotificationMessage->Topic->__any, MOTION_ALARM_SRC)) {
motion_state = strstr(response.wsnt__NotificationMessage->Message.__any,
"<tt:SimpleItem Name=\"State\" Value=");

if (strcasestr(motion_state, "true"))
*status = 1;
else
*status = 0;
}
}

motion_detector_check_status_free_response(&response);
end:
soap_end(soap);
soap_destroy(soap);
soap_free(soap);
return rc;
}

一切正常,但是struct _tev__PullMessagesResponse有一些指向char和其他结构的指针。

当我在 valgring 中运行程序时,它告诉我存在内存泄漏,并且通过 response 内的指针引用的资源在 motion_detector_check_status 结束后不可用。当然我可以自己写这个函数,但是我想知道gsoap是否提供了释放这些资源的函数?

提前致谢,抱歉我的英语不好。

最佳答案

嗯,深入了解 soapcpp2 文档,我发现选项 -Ed 会为 gsoap 使用的每种类型生成 soap_del_T 宏。

关于c - gsoap 和资源管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307886/

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