在C中为指针到指针的指针分配内存
我正在尝试为三重指针分配内存,但我无法使其正确。我有指向char的指针在C中为指针到指针的指针分配内存,c,pointers,memory,memory-management,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 < MAXW
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);
}
如何让它工作?
谢谢无效分配(字符***字){
void allocate(char ***words){
*words = malloc(sizeof(char*) * MAXWORDNUM);
for (int i = 0; i < MAXWORDNUM; ++i)
(*words)[i] = malloc(MAXWORD);
}
*words=malloc(sizeof(char*)*MAXWORDNUM);
对于(int i=0;i
如果需要指针数组,而不是指针数组,则不需要第一个循环:
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;
}
void分配(字符***字){
/*对于(int i=0;i
这取决于您的目的,您是要创建二维数组,还是指针数组,还是只创建指向指针的指针
1) 二维数组
void allocate_two_dimen_array(char ***words, unsigned int x, unsigned int y){
*word = malloc(x * y * sizeof(char));
}
2) 字符指针数组
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"};
(*字)[i]=…
已经是一个糟糕的举动<代码>*单词并不指向在该点上确定的任何东西,因此(*单词)[i]
是UB。第二个循环只是间接错误引导。此代码在我的mac中运行良好:(@vaibhav:no,这段代码在你的Mac中调用未定义的行为。如果我理解你的意图,你试图分配一个MAXWORDNUM x MAXWORDNUM
矩阵的char*
,每个矩阵都被分配了空间来容纳MAXWORD
字符。这样正确吗?如果不正确,你是在尝试分配一个简单的指针数组吗在MAXWORDNUM
元素中,每个元素都是一个长度指向内存MAXWORD
的char*
元素?@WhozCraig不,我正试图将MAXWORDNUM x MAXWORD 2D指针数组分配给char…你能解释一下malloc(MAXWORD)的用法吗在这种情况下有效?据我所知,我们需要以比特为单位提供大小…为什么在第一个示例中我们使用sizeof(char*)*MAXWORDNUM,但这里仅使用MAXWORD?您可以执行malloc(sizeof(char)*MAXWORD)
但使用sizeof(char)是1,所以我省略了它。如果您希望更具体一些,行为将是相同的。我仍然不明白为什么*words=malloc(sizeof(char*)*MAXWORDNUM)是正确的。*words
是类型char**
。指针的大小不受任何特殊原因的影响malloc
中的核心大小是sizeof(char*)
而不是sizeof(char**)
(或者更好的是,sizeof(*words)
)。Alter Mann的答案也有类似的差异。(顺便说一句,我读代码太晚是合理的回答)。@WhozCraig*单词是char**
--所以(*words)[i]
是char*
,所以当然要分配一些char*
s.@WhozCraig为了清晰、一致和类型安全,我总是将其编码为foo=malloc(sizeof*foo*N)
,因此这将是*words=malloc(sizeof**words*MAXWORDNUM)
word = {"This is the first line", "This is the second line"};