gpt4 book ai didi

c++ - 带删除的内存管理

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:12 25 4
gpt4 key购买 nike

我有一个小程序:

#include <iostream>

using namespace std;

void inputArray(int*& p, int& n);
void print(int *p, int n);

int main() {
int size = 0;
int *arr;
inputArray(arr, size);
}

void inputArray(int*& p, int& n) {
int *q = new int[n]; int m = n;
for (int i = 0; i < n; ++i) q[i] = p[i];
cout << endl << "How many numbers to insert? "; cin >> n;
delete p;
p = new int[n + m];
for (int i = 0; i < m; ++i) p[i] = q[i];
for (int i = 0; i < n; ++i) cin >> p[i + m];
n += m;
}

这个程序的目的是插入一个整数数组。但是,当我尝试在 Ubuntu 上使用 Code::Blocks 运行该程序时,它经常说:

free(): invalid pointer: 0xb7646000 ***

在我输入 n 之后。

但是,当我删除 delete p; 时,一切正常。但是,我还是想知道问题所在。谁能告诉我问题出在哪里?

最佳答案

 delete p; 

您从未分配过p,因此当您尝试释放 p 时,它不能。这就像试图访问别人的银行帐户,您可能有 姓名,但您不能释放他的

- 只是为了咆哮 - ,尝试使用更冗长的变量名称,它永远不会伤害。特别是如果你喝醉了 - 在一年内审查你的代码。

关于c++ - 带删除的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29902364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com