gpt4 book ai didi

c - c文件中指针的初始值是多少

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:49 24 4
gpt4 key购买 nike

在下面的代码中,是否可能导致内存泄漏?

reference-ril.c
static void requestRadioPower(void *data, size_t datalen, RIL_Token t)
{
....
ATResponse *p_response = NULL;
....
err = at_send_command(cmd, &p_response); // it's a memory leakage or not ?
....
at_response_free(p_response);
....
}

在其他函数中:

static void requestOrSendPDPContextList(RIL_Token *t)
{
ATResponse *p_response;
....
err = at_send_command_multiline ("AT+CGACT?", "+CGACT:", &p_response);
// it's a leakage or not ?
....
at_response_free(p_response);
....
}

实际上,在某些情况下,这些函数会在调用 at_response_free(p_response) 之前返回。我想我们首先要将 ATResponse *p_response 设置为 NULL,对吗?将指针设置为 NULL 是个好主意吗?

最佳答案

这取决于:

  • 如果 at_send_command_multilineat_send_command 查看它们各自最后一个参数 (&p_response) 指向的值,那么您应该将它们设置为可预测的值。这可能意味着您将 p_response 设置为 NULL。如果函数在不查看初始值的情况下为指针分配内存,那么你没问题。要回答您的特定问题,函数中声明的变量,除非声明为 static,否则没有默认值。
  • 如果 at_send_command* 函数总是为最后一个参数分配内存,那么您必须释放内存。如果他们只在成功的情况下分配,那么你必须只在成功的情况下释放。一个简单的规则是,对于每个 malloc()calloc(),都应该有一个 free()。 (realloc() 稍微改变了这一点,但您现在不需要担心)。

换句话说,您需要查看at_send_command* 函数的文档,或者查看函数的定义以完整回答您的问题。

关于c - c文件中指针的初始值是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2361860/

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