【发布时间】:2021-11-16 12:05:45
【问题描述】:
调试的时候发现从临时数组(b)复制到原始数组(a)后出现分段错误,不知道怎么解决,各位大神能帮帮我吗?
#include <iostream>
using namespace std;
int main() {
int n;
cout << "n = ";
cin >> n;
int *a = new int[n];
for (int i = 0; i < n; i++)
cin >> a[i];
cout << "\nNumber to remove: ";
int k;
cin >> k;
for (int i = 0; i < n; i++)
{
while (a[i] == k && i < n - 1)
{
int *b = new int[n]{0};
for (int j = 0; j < i; j++)
b[j] = a[j];
for (int j = i + 1; j < n; j++)
b[j - 1] = a[j];
a = NULL;
delete a;
n--;
int *a = new int[n];
for (int j = 0; j < n; j++)
a[j] = b[j];
}
}
cout << "Result: ";
for (int i = 0; i < n; i++)
cout << a[i] << " ";
}
【问题讨论】:
-
int *a = new int[n];在循环内必须是a = ...。您正在声明一个 newa,它与循环外部的a无关。 (循环外部的第一个a将在循环结束时为NULL,并且不再更改。 -
a = NULL; delete a;- 你希望它如何工作? -
TBH 使用
std::vector会更易读。 -
@Chí Bằng Hoàng 错误的原因是糟糕且过于复杂的代码。要从数组中删除一个值,不需要在每次删除目标值时动态分配一个辅助数组。
-
@MSalters 效果很好。问题是存在内存泄漏。:)
标签: c++