无法在C中调整2D数组的大小

时间:2013-10-18 01:03:40

标签: c arrays multidimensional-array dynamic-arrays

我有一个项目,我创建一个存储单词的2D char数组,可以选择添加更多单词,然后在必要时调整数组大小。当我尝试使用它并修复它时,我遇到了各种各样的错误,所以现在我觉得我需要额外注意我的代码。我特意寻找任何显然是分配内存或初始化数组的错误或麻烦的方法。

我特定于此代码的错误说“free():无效指针”并导致SIGABRT。以下是我的代码。

这是我的调整大小功能。

char **  resize_array(char **array) 
{
int i;
char** tmp = malloc(2 * sizeof(*array));
int j;
for(j = 0; j < (2 * sizeof(*array)); j++)
    tmp[j] = malloc(2 * sizeof(*array));

for(i = 0; i < (sizeof *words); i++)
{
    strcpy(tmp[i], words[i]);
}

for(i = 0; words[i] != NULL; i++)
    free(words[i]);
free(words);
return tmp;
}

这是我正在实施的调整大小功能

            int len;
        len = (sizeof words);

    if(upperbound > len) //upperbound keeps track of the word count 
                                 //and resizes the array 
        { 
            char **tmp = resize_array((char **) words);
            int i;
            for(i = 0; i <= upperbound; i++)
                strcpy(words[i], tmp[i]);
        }

最后这里是“words”数组,因为它最初初始化。

    char words[14][50];

我正在使用VI并在Ubuntu上运行所有内容。提前感谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

resize_array函数内部,只能使用指向它的指针来确定数组的先前大小。

对malloc的调用

malloc(2 * sizeof(*array))

请求分配的大小是指向char的指针的两倍(在64位机器上只有16个字节)。

这是您需要解决的第一个问题。