如何在函数内分配内存 int 指针数组并删除 main.cpp 中分配的内存
how to allocate memory int pointer array inside a function and delete the allocated memory in main.cpp
我正在尝试使用非模板类型参数将内存分配给指向数组的指针。但是,我在 main
函数中的 delete ptr 处收到 运行 时间错误。
#include <iostream>
using namespace std;
template<typename T, int SIZE>
void createArray(T** arrPtr) {
*arrPtr = new T[SIZE];
for (int i = 0; i < SIZE; i++)
(*arrPtr[i]) = i + 1;
}
int main()
{
constexpr int size = 3;
int* ptr = nullptr;
createArray<int, size>(&ptr);
if (ptr == nullptr)
return -1;
for (int i = 0; i < size; i++)
std::cout << *(ptr++) << " ";
delete ptr;
ptr = nullptr;
return 0;
}
在函数内而不是这条语句
(*arrPtr[i]) = i + 1;
你需要写
(*arrPtr )[i] = i + 1;
并且在这个 for 循环中,原始指针 ptr
正在被更改。
for (int i = 0; i < size; i++)
std::cout << *(ptr++) << " ";
因此在这个声明中
delete ptr;
使用了动态分配内存的无效地址。
改变循环例如
for ( const int *p = ptr; p != ptr + size; )
std::cout << *p++ << " ";
我正在尝试使用非模板类型参数将内存分配给指向数组的指针。但是,我在 main
函数中的 delete ptr 处收到 运行 时间错误。
#include <iostream>
using namespace std;
template<typename T, int SIZE>
void createArray(T** arrPtr) {
*arrPtr = new T[SIZE];
for (int i = 0; i < SIZE; i++)
(*arrPtr[i]) = i + 1;
}
int main()
{
constexpr int size = 3;
int* ptr = nullptr;
createArray<int, size>(&ptr);
if (ptr == nullptr)
return -1;
for (int i = 0; i < size; i++)
std::cout << *(ptr++) << " ";
delete ptr;
ptr = nullptr;
return 0;
}
在函数内而不是这条语句
(*arrPtr[i]) = i + 1;
你需要写
(*arrPtr )[i] = i + 1;
并且在这个 for 循环中,原始指针 ptr
正在被更改。
for (int i = 0; i < size; i++)
std::cout << *(ptr++) << " ";
因此在这个声明中
delete ptr;
使用了动态分配内存的无效地址。
改变循环例如
for ( const int *p = ptr; p != ptr + size; )
std::cout << *p++ << " ";