
我动态生成了一个二维数组,但我只用它的 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 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 ```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 出来的长度引发异常 |