【发布时间】:2021-08-23 18:32:39
【问题描述】:
当我使用引用指针类型作为参数时遇到了一些问题。
首先,这是我的代码。
#include<iostream>
using namespace std;
void test(int*& ptr);
int main(void)
{
int* ptr = new int[1];
ptr[0] = 100;
cout << ptr[0];
test(ptr);
cout << ptr[0] << '\t' << ptr[1];
}
void test(int*& ptr)
{
int* tmp = new int[2];
tmp[0] = 1;
tmp[1] = 2;
int* tmp2 = ptr;
ptr = tmp;
cout << ptr[0] << '\t' << ptr[1];
delete[]tmp2;
}
当编译这段代码时,输出是
100
1 2
这个输出是我想要得到的
但是当我调试这段代码时,
Exception thrown: read access violation.
发生了这个错误。
如何避免这个错误,我的错是什么? :(
如果不使用引用类型重新分配参数的内存,我该怎么办?
【问题讨论】:
-
引用类型不是问题;对动态内存管理和指针 is 的基本和基本了解。例如:
delete[]ptr;破坏了你刚刚分配的内存。回到main,您现在有一个悬空指针。您还泄漏了在main中分配的原始内存。无关,tmp2毫无价值,可以说tmp也是如此。 -
传递的ptr中的单个项目,访问ptr[1]表示第二个项目
-
哦,对不起,我修复了我的代码...
-
我想知道的是,当我调用一个有参数的函数(内存分配的指针(引用类型))时,我可以更改参数(指针)在函数中指向的地址吗..