我动态生成了一个二维数组,但我只用它的 1~n 行
int **D = new int *[n + 1];
for (int i = 1; i <= n; i++)
{
D[i] = new int[i];
}
在 delete 这个二维数组时,我遇到了异常
for(int i = 1; i <= n; i++)
{
delete[] D[i];
}
delete[] D;
出现异常:
Trace/breakpoint trap
调试时发现在第一次循环就报错了,把 i 改为 0,2 都不行 有人知道是为什么吗?
1
May725 2019-06-02 11:19:23 +08:00 via iPhone
没觉着代码有问题呀,这中间有其他操作,导致指针丢了吧
|
2
JeffKing 2019-06-02 11:22:21 +08:00 via iPhone
写了初始化 赋值 和销毁的代码,没有重现你的问题。怀疑是你中间赋值或者使用时越界了。
|
3
kljsandjb 2019-06-02 11:25:52 +08:00 via iPhone
刚运行了一遍,没发现错误…
|
4
ershierdu 2019-06-02 11:26:36 +08:00
把这两段代码贴进 main 函数,最开始加了一行 int n = 2;
没有重现 |
5
Steiner OP 我的编辑器是 vscode,编译器是用的 gcc
|
6
hsyu53 2019-06-02 13:47:50 +08:00 via iPhone
动态规划那里,内层循环数组访问越界了
|
7
catror 2019-06-02 16:00:33 +08:00 via Android
new int[i+1]
|
8
ershierdu 2019-06-02 16:04:54 +08:00 1
for (int i = 1; i <= n; i++)
{ D[i] = new int[i]; // D[i]是一个长度 为 i 的数组,即 D[i][0]到 D[i][i-1] } ... ... for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { cin >> D[i][j]; // j 的最大值为 i,即会出现 D[i][i]的情况,越界了 } } ------------------------------------------------------ 后面的代码我没继续看了,不确定还有没有问题 |
9
yucao 2019-06-02 16:12:15 +08:00 1
```cpp
int **D = new int *[n + 1]; for (int i = 1; i <= n; i++) { D[i] = new int[i]; } //... for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { cin >> D[i][j];//瞎搞嘛... } } ``` 这里已经越界产生 ub 了,后面 delete 时候无法定位你的 new 出来的长度引发异常 |