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

c文件中指针的初始值是多少,c,android,embedded,C,Android,Embedded,在下面的代码中,是否可能导致一些内存泄漏 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 ?

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

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)之前返回。 我想我们先把一个响应设置为NULL,对吗?
将指针设置为NULL是否是个好主意?

将指针设置为NULL肯定是个好主意;但这两种情况都不是内存泄漏


C中指针的初始值是垃圾,任何未初始化变量的初始值也是垃圾。(有人告诉我,这是因为效率,需要记住。)

将指针设置为null肯定是个好主意;但这两种情况都不是内存泄漏

C中指针的初始值是垃圾,任何未初始化变量的初始值也是垃圾。(有人告诉我,这是因为效率,需要记住。)

这取决于:

  • 如果
    at\u send\u command\u multiline
    at\u send\u command
    查看其各自的最后参数(
    &p\u response
    )所指向的值,则应将其设置为可预测值。这可能意味着您将
    p\u response
    设置为
    NULL
    。如果函数在不查看初始值的情况下为指针分配内存,那么就可以了。为了回答您的特定问题,函数中声明的变量没有默认值,除非声明为
    static
  • 如果
    at\u send\u命令*
    函数始终为最后一个参数分配内存,则必须释放内存。如果他们只在成功的情况下分配,那么你必须只在成功的情况下释放。一个简单的规则是,对于每个
    malloc()
    calloc()
    ,都应该有一个
    free()
    。(
    realloc()
    稍微改变了这一点,但您现在不必担心它)
换句话说,您需要查看
at_send_command*
函数的文档,或者查看函数的定义以完整回答您的问题。

这取决于:

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

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

@Alok-“要回答您的特定问题,函数中声明的变量,除非声明为静态,否则没有默认值。”,不仅没有默认值,还可以是任何值。因为它不是声明为静态的,所以它是在堆栈上创建的,并且不是自动初始化的,因此可以有任何可能留在堆栈上的值。@西蒙:你说得对,不过我避免使用“堆栈”这个词对于自动初始化的变量:就C标准而言,可能有也可能没有堆栈。@Alok-“为了回答您的特定问题,在函数中声明的变量,除非声明为静态,否则没有默认值。”这里更清楚一点,不仅没有默认值,还可以是任何值。因为它不是声明为静态的,所以它是在堆栈上创建的,并且不是自动初始化的,因此可以有任何可能留在堆栈上的值。@simon:你是对的,尽管我避免使用“堆栈”这个词来表示自动初始化的变量:就C标准而言,可能有也可能没有堆栈。