【发布时间】:2020-01-26 09:43:35
【问题描述】:
我想在函数内部动态分配内存。该函数名为func_1,声明如下:
int func_1(int **destination);
这里destination是一个指向指针的指针。此指针包含我要在函数内部动态分配内存的指针的地址。
函数func_1的代码如下:
void func_1(int **destination)
{
*destination = (int*)malloc(sizeof(int) * 10);
for(int i = 0 ; i < 10 ; i++)
{
*destination[i] = i; //segmentation fault comes HERE
}
}
下面是我的main()函数:
int main()
{
int *pointer;
func_1(&pointer);
return 0;
}
当我尝试运行这个程序时,我得到一个分段错误 (SIGSEGV) 错误。我用GDB定位了这个错误的根源,结果发现for循环里面的那行是这个错误的罪魁祸首。
请注意,一旦函数退出,我希望保留分配给函数内部动态分配内存的值,这就是我传递要分配的指针地址的原因动态记忆。
我想知道:
为什么会出现此错误?
如何解决?
感谢您的帮助!
【问题讨论】:
-
你忘了
free()堆对象。