Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
C 分配和释放指针到指针_C_Pointers - Fatal编程技术网

C 分配和释放指针到指针

C 分配和释放指针到指针,c,pointers,C,Pointers,我试图将指向指针(char**)的指针传递到一个函数中,该函数将对其进行初始化,然后将其传递到另一个函数中,该函数将释放内存,但在释放过程中我遇到seg错误,这使我相信我的分配出了问题 Valgrind报告在该行使用非斜体值。tmp[i]指向0x0 if(tmp[i]) free((char*)tmp[i]); 这是代码(这只是测试代码) 我一直在玩这个有一段时间,阅读指针等,但不能得到我的头周围的问题。任何想法都非常感谢 您需要分配给*test,而不是从中分配。那么: void alloc

我试图将指向指针(char**)的指针传递到一个函数中,该函数将对其进行初始化,然后将其传递到另一个函数中,该函数将释放内存,但在释放过程中我遇到seg错误,这使我相信我的分配出了问题

Valgrind报告在该行使用非斜体值。tmp[i]指向0x0

if(tmp[i]) free((char*)tmp[i]);
这是代码(这只是测试代码)


我一直在玩这个有一段时间,阅读指针等,但不能得到我的头周围的问题。任何想法都非常感谢

您需要分配给
*test
,而不是从中分配。那么:

void 
alloc_strings(char ***test, int count) 
{
    char **tmp = malloc(count * sizeof *tmp);
    /*...*/
    *test = tmp;
}
在代码示例中

alloc_strings(char ***test, int count) 
{
    char **tmp = *test;
*test
应该有一些空间来存储指向当前未分配的
char**
的指针。因此,如果示例如下所示

char** array[1];

alloc_strings(&array[0], 7);

我觉得代码会起作用。

没错。两次(也在析构函数中)@wildplasser我认为析构函数很好,只是有点过于复杂。它很好(它析构函数…),但你希望它设置
*test=NULL。(顺便说一句:构造函数有一个潜在的memoryleak,如果*test恰好指向以前分配的数组)@cnicutar那太好了,谢谢你,我想我明白了,但是我需要花更多的时间在这上面。至于析构函数,它只是在移动代码时又快又脏。再次感谢。
alloc_strings(char ***test, int count) 
{
    char **tmp = *test;
char** array[1];

alloc_strings(&array[0], 7);