我有一个由readfile
调用的main
函数。标准是我必须将char**
传递给readfile
,我必须在readfile
内分配和初始化此参数。我对如何在子功能中处理char**
感到困惑。
void main()
{
char** data;
readfile(data);
}
void readfile(char** data)
{
data = (char**)malloc(1000); //give me Segmentation fault
data = (char*)malloc(1000); //give me " warning: assignment from incompatible pointer type" during compliation.
data = (char)malloc(1000); //give me "warning: cast from pointer to integer of different size" during compilation.
}
我试图先将指针指向它,例如char* pdata = *data;
我可以使用pdata
确定。
如何在readfile
函数中分配此变量?
答案 0 :(得分:1)
有两种解决方案:
在主
传递指针的地址,如下所示:
void main()
{
char** data;
readfile(&data); //notice the pass of data adress to the function
}
void readfile(char*** data) //notice the extra * operator added
{
*data = malloc(1000);
}
答案 1 :(得分:0)
也许您希望char*data=NULL;
中有main
,然后在那里拨打readfile(&data);
。对data
内的正式参数readfile
的任何更改都不会传播给调用者(因为C在传递参数时具有call by value语义)。
此外,您应该始终测试malloc
的结果,例如
data = malloc(1000);
if (!data) { perror("malloc data"); exit(EXIT_FAILURE); };
你可能应该使用
初始化获得的内存区域memset (data, 0, 1000);
或只是使用calloc
来获取归零内存。
如果您从&data
传递main
,则将readfile
的正式论证声明为char**ptr
,并在readfile
内*ptr = malloc(1000);
之类的内容。 ..