C++ C+中新内存的范围+;
当我尝试执行以下操作时,会出现一个错误,表示我正在尝试读取或写入受保护的内存C++ C+中新内存的范围+;,c++,memory-management,memory-leaks,C++,Memory Management,Memory Leaks,当我尝试执行以下操作时,会出现一个错误,表示我正在尝试读取或写入受保护的内存 void func1(int * ptr) { int *ptr_b = new int[5]; ptr = ptr_b; } void main() { int *ptr_a; func1(ptr_a); delete [] ptr_a; } 这合法吗?将您的签名更改为: void func1(int *& ptr) 您正在按值传递指针,因此外部ptr不会被更改
void func1(int * ptr) {
int *ptr_b = new int[5];
ptr = ptr_b;
}
void main() {
int *ptr_a;
func1(ptr_a);
delete [] ptr_a;
}
这合法吗?将您的签名更改为:
void func1(int *& ptr)
您正在按值传递指针,因此外部ptr
不会被更改。所以这就像
int main() { // <--- main returns int
int *ptr_a;
delete [] ptr_a;
}
int main(){/否。您犯了一个初学者常见的错误。您不记得指针只是按值传递的变量,除非您请求引用或指向它们的指针。请将函数的签名更改为void func1(int*&ptr)
按值传递指针。这意味着函数使用的指针是调用方指针的本地副本。因此调用方看不到在函数中指定的值
改为通过引用传递,以便函数可以分配给调用方的指针,而不是分配给本地副本
void func1(int* &ptr)
或者,也许考虑返回新分配的指针:
int* func1()
{
return new int[5];
}
我更喜欢后一种方法。< /P>不要使用<代码>无效的主()/<代码>:你应该通过引用来传递指针,但是,我看,“如何使用代码>空主机())/>代码不是合法的C++,我们应该提供合法C++的例子。