是否可以在不同的语句中为函数分配相同的内存

时间:2015-01-25 06:25:10

标签: c gcc

抱歉我的英文不好

嗨,今天我遇到了记忆问题。 或变量问题?我不知道。

以下是我的来源,而且很简单

#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errmsg.h>

typedef struct mysql_bind_list
{
    MYSQL_BIND *mysql_bind;
    unsigned int length;
} MYSQL_BIND_LIST;

MYSQL_BIND_LIST *create_mysql_bind_list()
{
    MYSQL_BIND_LIST mysql_bind_list;
    MYSQL_BIND_LIST *mysql_bind_list_point = &mysql_bind_list;
    mysql_bind_list_point->mysql_bind = (MYSQL_BIND *)malloc(1);
    mysql_bind_list_point->length = 0;
    printf("%p\n", mysql_bind_list_point);
    return mysql_bind_list_point;
}

void main()
{
    MYSQL_BIND_LIST *bind_list1 = create_mysql_bind_list();
    MYSQL_BIND_LIST *bind_list2 = create_mysql_bind_list();
}

我的gcc命令是

gcc -o test.out test.c `mysql_config --cflags --libs` && ./test.out && rm test.out

我应该解释那个源码,18行,使用printf打印mysql_bind_list_point的内存地址。 我希望打印不同的地址,但打印相同的地址。

$ gcc -o test.out test.c `mysql_config --cflags --libs` && ./test.out && rm test.out
0x7fff0851e2d0
0x7fff0851e2d0

怎么可能? 有人知道吗?

1 个答案:

答案 0 :(得分:3)

您正在返回一个指向局部变量的指针,当函数返回该局部变量超出范围时,会留下一个迷路指针。使用该迷路指针会导致undefined behavior

如果需要返回指向结构的指针,也要动态分配结构。一旦你完成了结构,请记住free