Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在函数中初始化和分配char**参数_C_Pointers_Memory Management_Arguments - Fatal编程技术网

如何在函数中初始化和分配char**参数

如何在函数中初始化和分配char**参数,c,pointers,memory-management,arguments,C,Pointers,Memory Management,Arguments,我有一个由main调用的readfile函数。标准是我必须将char**传递到readfile,并且我必须在readfile中分配和初始化此参数。对于如何在子函数中处理char**,我有点困惑 void main() { char** data; readfile(data); } void readfile(char** data) { data = (char**)malloc(1000); //give me Segmentation fault

我有一个由
main
调用的
readfile
函数。标准是我必须将
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
ok


如何在
readfile
函数中分配此变量?

可能需要
char*data=NULL
main
中,然后调用
readfile(&data)那里。对
readfile
中形式参数
data
的任何更改都不会传播到调用方(因为C在传递参数时具有语义)

此外,您应该始终测试
malloc
的结果,例如

data = malloc(1000);
if (!data) { perror("malloc data"); exit(EXIT_FAILURE); };
您可能应该初始化获得的内存区域,也许可以使用

memset (data, 0, 1000);
或者简单地使用
calloc
获取零内存

如果从
main
传递
&data
,将
readfile
的形式参数声明为
char**ptr
,并在
readfile
内部执行类似
*ptr=malloc(1000)的操作


BTW,你考虑使用了吗?这可能是相关的。

有两种解决方案:

  • 在主内存中分配内存

  • 按如下方式传递指针的地址:

    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); 
    }
    

  • 我们不知道您的
    readfile
    想要做什么。您的代码不读取任何文件!谢谢你的回复。要求使用char**作为参数,并在函数内分配内存。我必须能够将数组返回到main。是的,这很可爱,但是如果你需要将指针传递给指针,就不能这样做。如果你有一个指向指针的指针,你的参数必须是char***data。谢谢。我将在主内存中分配内存。我可以只做char*数据。它正在工作。