C矩阵redimensioning导致segfault

时间:2015-08-30 02:38:21

标签: c arrays pointers matrix segmentation-fault

我有一个字符串数组(char **),当它达到容量时我需要对它进行一些重新设计。因此,在这个函数中,我创建了一个新数组,分配比以前大两倍的大小,并且对于旧数组中的每个字符串,我为新数组分配空间并复制内容。代码如下:

void matrix_double (char ***arrayptr, int *size) {
    char **array = *arrayptr, **newarr;
    int i, wordsize;
    newarr = malloc (*size * 2);
    for (i = 0; i < *size; i++) {
        wordsize = strlen (array[i]);
        newarr[i] = malloc (wordsize + 1);
        strcpy (newarr[i], array[i]);
        free (array[i]);
    }
    *size *= 2;
    free (array);
    *arrayptr = newarr;
}

但是,在为第7行中的新字符串分配空间时,我遇到了很多段错误。根据Valgrind的说法,那些malloc命令是从为数组分配的空间内分配空间,这个空间很小 - 我最多使用10或20个字符串的数组 - 因此溢出到其他分配的区域,导致段错误。如果我提高阵列内存分配(例如malloc (*size * 200)一切都顺利运行。

有关正在发生的事情的任何想法?在其他任何地方都没有看到这种行为。

1 个答案:

答案 0 :(得分:0)

malloc参数是以字节为单位的大小。所以你应该把它称为

malloc(sizeof(char *) * (*size) * 2);

致电

malloc(*size * 2);

你正在分配2*size字节的内存,这对于size指针是不够的。