首页 > 解决方案 > 每当我尝试释放旧内存时,我的程序就会崩溃

问题描述

所以基本上有一个函数可以分配一个新的指针内存,当我尝试解除旧的指针内存时,程序基本上会使我的代码崩溃

char** AddingToTheBook(char** original, int* size, char *number)
{
    char** newArray = (char**)malloc(sizeof(char*)*(*size));
    //allocating and copying the values
    for (int i = 0; i < *size; i++)
    {
        *(newArray + i) = (char*)malloc(sizeof(char)*(strlen(*(original + i))));
        strcpy(*(newArray + i), *(original + i));
    }

    //allocating a new memory to the new number
    *(newArray + (*size)) = (char*)malloc(sizeof(char)*strlen(number));
    strcpy(*(newArray + (*size)), number);
    (*size)++;
    //delocating the allocated memories 
    for (int i = 0; i < size; i++)
        free(original[i]);
    free(original);

    return newArray;
}

标签: c

解决方案


您可以改用 realloc

char** AddingToTheBook(char** original, size_t oldsize, char *number)
{
    char** tmp = realloc(**original, (oldsize  + 1) * sizeof(char *));

    if(tmp)
    {
        tmp[oldsize] = malloc(strlen(number) + 1'
        if(tmp[oldsize])
        {
            strcpy(tmp[oldsize], number);
        }
        else
        {
            /* do something for example realloc back to the old size */
            tmp = NULL;
        }
    }
    return tmp;
}

正确用法示例

    char **tmp = AddingToTheBook(book, size, "Test String")

    if(tmp)
    {
        book = tmp;
        size++;
    }
    else
    {
        /* do something adding to book failed */
    }

推荐阅读