C++ 指针索引:获取意外值
但是,它会打印没有任何意义的随机整数值,至少在第一个整数值之后。在通过调试器运行代码之后,ptr地址在main方法中第一次运行for循环之后立即被删除,我无法理解为什么。此外,我不知道f()方法的用途是什么,我认为它不应该改变任何东西,但当我从主函数中删除它时,第一个值会准确返回(后面的所有值都是错误的)。发生了什么事?尝试以下方法:C++ 指针索引:获取意外值,c++,loops,pointers,memory,indexing,C++,Loops,Pointers,Memory,Indexing,但是,它会打印没有任何意义的随机整数值,至少在第一个整数值之后。在通过调试器运行代码之后,ptr地址在main方法中第一次运行for循环之后立即被删除,我无法理解为什么。此外,我不知道f()方法的用途是什么,我认为它不应该改变任何东西,但当我从主函数中删除它时,第一个值会准确返回(后面的所有值都是错误的)。发生了什么事?尝试以下方法: 1 4 9 16 25 36 49 64 81 100 int*计算平方(int&n){ int*arr=新的int[10]; n=10; 对于(int k=
1 4 9 16 25 36 49 64 81 100
int*计算平方(int&n){
int*arr=新的int[10];
n=10;
对于(int k=0;k
computeSquares完成运行后,释放内存“int arr[10]” 试试这个:
1 4 9 16 25 36 49 64 81 100
int*计算平方(int&n){
int*arr=新的int[10];
n=10;
对于(int k=0;k
computeSquares完成运行后,释放内存“int arr[10]” 您得到这个结果是因为您误解了基本的语言功能。除了MsrButterfly的回答,他已经指出了最重要的问题,让我给你以下建议:
- 忘记使用原始指针;这是一种危险的做法,很难维护和扩展,并且肯定会导致您编写内存泄漏的代码。您最好看一看一些STL文档,这些文档拥有std::vector容器,您可以使用它来代替数组arr
- 您的computeSquares方法是危险的,因为您将变量n作为一个参数,该参数应该是数组的大小。在您的方法中,首先使用硬编码大小10定义arr,然后设置n=10;我建议您避免这种构造,因为在本例中,您需要维护两个依赖于数字10的变量李>
- 您之所以得到这个结果,是因为您误解了基本的语言功能。除了MsrButterfly的回答,他已经指出了最重要的问题,让我给你以下建议:
- 忘记使用原始指针;这是一种危险的做法,很难维护和扩展,并且肯定会导致您编写内存泄漏的代码。您最好看一看一些STL文档,这些文档拥有std::vector容器,您可以使用它来代替数组arr
- 您的computeSquares方法是危险的,因为您将变量n作为一个参数,该参数应该是数组的大小。在您的方法中,首先使用硬编码大小10定义arr,然后设置n=10;我建议您避免这种构造,因为在本例中,您需要维护两个依赖于数字10的变量李>
int *computeSquares(int &n) { int *arr = new int[10]; n = 10; for (int k = 0; k < n; k++) arr[k] = (k + 1) * (k + 1); return arr; }