无效指针
Invalid Pointer?
我最近了解了指针,并且一直在努力真正理解它们。但是,我遇到了麻烦。对于类,我们必须编写一个函数,该函数将使数组 x 次数翻倍。我能够在没有任何实际问题的情况下编写该函数,但我正在尝试将其实现为实际代码,并且继续收到无效的指针错误。代码如下:
#include <iostream>
using namespace std;
int *ArrayDoubling(int inputArray[], int initialSize, int numberToDouble);
int main(){
int arr[2] = {0,1};
int array_size = 2;
int number = 3;
ArrayDoubling(arr, array_size, number);
}
int *ArrayDoubling(int inputArray[], int initialSize, int numberToDouble){
for(int i=0;i<numberToDouble;i++){
int *array2 = new int[initialSize*2];
for(int i=0;i<initialSize;i++){
array2[i] = inputArray[i];
array2[i+initialSize] = inputArray[i]*2;
}
initialSize = initialSize*2;
delete []inputArray;
inputArray = array2;
}
return inputArray;
}
那么究竟是什么导致了问题,我该如何解决呢?也不确定这是否真的会打印数组的输出,但我也在尝试实现这一目标。感谢您的任何帮助!
ArrayDoubling
函数在 inputArray
参数上调用 delete[]
。但是,当您在 main
中调用自动数组时,您会传递指向自动数组的指针。使用未从new[]
获取的指针调用delete[]
具有未定义的行为。
要修复它,请仅将该函数与动态分配的数组一起使用。
您的内部循环是按倍数循环,而不是数组的大小。对于数组大小小于翻倍次数的输入,您将访问超出范围的索引。
我不太确定你的意图是什么,但我认为你的第二个 for 循环应该是这样的:
for(int i=0;i<initialSize;i++)
你的代码最大的问题是这一行: delete []inputArray;
inputArray
最初被宣布为int arr[2] = {0,1};
不应删除。 您只能删除使用关键字 new
创建的变量。
从广义上讲,您的程序需要看起来像这样。 请注意,new[]
发生在ArrayRepeat
的人口循环之外,因此它只被调用一次,类似地delete[]
只会在通过new[]
创建的同一指针上被调用一次。
// dynamically allocate an array which contains the first `N` elements of
// `array` repeated `repeats` times.
int * ArrayRepeat (int * array, size_t N, int repeats) {
int * result = new int[N * repeats];
assert(result); // Error check
// Loops to populate result goes here
return result;
}
int main (void) {
int arr[] = {0, 1};
int * repeated = ArrayRepeat(arr, 2, 3);
// Print the result
for (int i = 0; i < 2 * 3; ++i) {
printf("%dn", repeated[i]);
}
delete[] (repeated);
return 0;
}
相关文章:
- 在 C++ 中传递字符串时指针无效
- free():仅在一种情况下指针无效
- free():实现矢量擦除()时的指针无效
- free():添加字符串时指针无效
- C++ ecliipse free():函数末尾的指针无效
- C++ 指针无效函数问题
- 将 boost::object_pool 与矢量一起使用时指针无效
- free():矢量 C++ 的指针无效<vec4i>
- omnet++free():指针无效,错误134/139
- 在OpenCV中调用stereoRectify会导致异常:帧指针无效
- 销毁和重新创建一个对象会使指向该对象的所有指针无效吗
- 用户定义类中的Null指针无效
- 删除指向类的指针无效
- 运行GTest时指针无效
- C++错误消息:指针无效
- 可以std::string reconfiguration使指向堆的指针无效
- 为什么删除指向指针向量的指针会导致指针无效
- MPI_scatter:缓冲区指针无效
- mmap 错误:分段错误/指针无效错误
- 返回 std::string 时指针无效(libc 如此说)