为C指针指向指针的指针分配内存

时间:2014-07-21 08:47:44

标签: c pointers memory memory-management

我正在尝试为三指针分配内存,但我无法做到正确。我有指向char

的指针
char **words;
allocate(&words);

我创建了内存分配方法:

void allocate(char ***words){

    for (int i = 0; i < MAXWORDNUM; ++i)
        (*words)[i] = malloc(sizeof(char*) * MAXWORDNUM);

    for (int i = 0; i < MAXWORD; ++i)
        (**words)[i] = malloc(sizeof(char) * MAXWORD);
}

据我所知,我应该为指针分配内存,然后我应该为每个char分配内存。对于上面的代码,我收到错误:

warning: incompatible pointer to integer conversion assigning
      to 'char' from 'void *' [-Wint-conversion]
        (**words)[i] = malloc(sizeof(char) * MAXWORD); 

如何让它发挥作用? 谢谢

3 个答案:

答案 0 :(得分:4)

void allocate(char ***words){
    *words = malloc(sizeof(char*) * MAXWORDNUM);
    for (int i = 0; i < MAXWORDNUM; ++i)
        (*words)[i] = malloc(MAXWORD);
}

答案 1 :(得分:3)

你想要一个指针数组,而不是一个指针数组数组,不需要第一个循环:

void allocate(char ***words){
    /* for (int i = 0; i < MAXWORDNUM; ++i) */ 
    /* (m)allocate space for n pointers to words */
    *words = malloc(sizeof(char *) * MAXWORDNUM);

    for (int i = 0; i < MAXWORDNUM; ++i)
        (*words)[i] = malloc(MAXWORD); /* (m)allocate space for each word */
}

int main(void)
{
    char **words;

    allocate(&words);
    return 0;
}

答案 2 :(得分:1)

这取决于你的目的,你打算创建一个二维数组,或一个指针数组,或只是一个指针指针?

1)二维数组

void allocate_two_dimen_array(char ***words, unsigned int x, unsigned int y){
    *word = malloc(x * y * sizeof(char));
}

2)一个char指针数组

void allocate_pointer_array(char ***words, unsigned int quantity){
    *word = malloc(quantity * sizeof(char*));
} 

3)指向char指针的纯指针

void allocate_pointer_pointer(char ***words){
    *word = malloc(sizeof(char**));
}

出于实际目的,例如:第一个可用于存储bmp图像,第二个用于存储一组字符串

word = {"This is the first line", "This is the second line"};