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