Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 多次调用free会使应用程序崩溃_C_Memory Management_Malloc_Free - Fatal编程技术网

C 多次调用free会使应用程序崩溃

C 多次调用free会使应用程序崩溃,c,memory-management,malloc,free,C,Memory Management,Malloc,Free,我有一个函数 char *mdb_data = NULL; int mdb_dataLen = 0; char *getMDBDataPtr(int len) { if(len <= 0) return NULL; if(mdb_data == NULL) { mdb_data = (char *)malloc(len); memset(mdb_data, 0, len); mdb_dataLen

我有一个函数

char *mdb_data = NULL;
int mdb_dataLen = 0;

char *getMDBDataPtr(int len)
{
    if(len <= 0)
        return NULL;

    if(mdb_data == NULL)
    {
        mdb_data = (char *)malloc(len);
        memset(mdb_data, 0, len);
        mdb_dataLen = len;
    }
    else
    {
        if(mdb_dataLen < len)
        {
            free(mdb_data);
            mdb_data=NULL;
            mdb_data = (char *)malloc(len);
            memset(mdb_data, 0, len);
            mdb_dataLen = len;
        }
    }
    return mdb_data;
}
char*mdb_data=NULL;
int mdb_dataLen=0;
char*getMDBDataPtr(int len)
{

如果(len发布的看起来不错。您是否有机会修改调用方中的
mdb_数据
。。我使用它通过Socket接收数据。可能其他地方的缓冲区溢出正在破坏内存。请显示使用此功能的代码。我建议您使用
realloc
而不是
free
malloc
。im实现可能能够检测到由于填充,新分配可以使用与旧分配相同的空间。