我正在尝试为三指针分配内存,但我无法做到正确。我有指向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);
如何让它发挥作用? 谢谢
答案 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"};