realloc char数组的动态数组

时间:2014-04-19 11:37:58

标签: c++ arrays malloc realloc

我必须在数组中存储一些char数组。但我不知道有多少我必须存放。

什么是最好的:用小尺寸(如1)初始化我的数组,然后重新分配所有内容?我该如何使用realloc或malloc?

遗憾的是,我不能使用向量,也不能使用stl容器和字符串。增加向量的大小非常容易,我试图理解malloc和realloc,但我没有......

char ** array=(char**)malloc(10*sizeof(char*));
for (int i=0;i<10;i++)
    array[i]="10";
array=(char **)realloc(array,(sizeof(array)+1)*sizeof(char*));
array[10]="12";

我理解基本原则是的。 是这样吗?

1 个答案:

答案 0 :(得分:2)

嗯,似乎你不能使用矢量,但通常这正是他们的目的。

你的解决方案的问题是它比C ++更多C,你使用char数组,而在C ++中你应该使用string,你使用mallocrealloc而在C ++中你应该使用new

此外,您需要为每个级别的间接分配内存,因此对于char **,您至少需要拨打malloc两次。这是一个更正的解决方案(它仍然几乎是C,而不是C ++,注意你没有使用单个C ++标题):

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

int main(void) {

    //allocate a buffer of 10 pointers
    size_t array_size = 10;
    char ** array=(char **)malloc(array_size * sizeof(*array) );
    if (!array)
        return -1;

    //now allocate the 10 pointers with a buffer to hold 42 characters
    for (int i = 0; i < array_size; i++) {
        array[i]= (char *)malloc( 42 * sizeof (*array[i]) );
        if (!array[i])
            return -1;
        strcpy(array[i], "10");
    }

    //for some reason we need to increase array size by 1
    ++array_size;
    array = (char **)realloc(array, array_size * sizeof(*array) );
    array[array_size-1] = (char *)malloc(42 * sizeof(*array[array_size-1]) );
    if (!array[array_size-1])
        return -1;
    strcpy(array[array_size-1], "12");
}