我在下面的代码中存在分段错误,但是在将其更改为指针指针后,它很好。有人能给我任何理由吗?为什么需要指针指针来分配内存中的功能
void memory(int * p, int size) {
try {
p = (int *) malloc(size*sizeof(int));
} catch(exception& e) {
cout<<e.what()<<endl;
}
}
它不会在主函数工作作为打击
int *p = 0;
memory(p, 10);
for(int i = 0 ; i < 10; i++)
p[i] = i;
但是,它的工作原理是这样的。
void memory(int ** p, int size) { `//pointer to pointer`
try{
*p = (int *) malloc(size*sizeof(int));
} catch(exception& e) {
cout<<e.what()<<endl;
}
}
int main()
{
int *p = 0;
memory(&p, 10); //get the address of the pointer
for(int i = 0 ; i < 10; i++)
p[i] = i;
for(int i = 0 ; i < 10; i++)
cout<<*(p+i)<<" ";
return 0;
}
由于malloc永远不会抛出,所以这些try块没有意义。 – 2010-04-12 22:27:45
如果这是C,那些try块是无效的。这实际上是C++吗?如果是这样,标签需要改变。 – 2010-04-12 22:31:22
@Fred,这个问题与C也有关系,即使片段是C++,正如你所指出的那样。我添加了C++标记 – hhafez 2010-04-12 22:39:12