C++程序输入特定值删除动态数组时报0xC0000374内存错误求助
问题原因与修复方案
核心错误原因
- 堆内存越界写入:你申请的数组
A长度为size,合法下标范围是0 ~ size-1,但你直接用奇数取值i作为数组下标,i最终会远大于size-1,写入了数组外的堆内存,破坏了堆块的结构校验信息。你遇到的错误码0xC0000374就是Windows平台下堆已损坏的标准返回值,完全符合越界写堆的故障表现。 - 计数逻辑冗余错误:你要生成N个奇数的平方,不需要额外计算
counter变量,原有counter的计算逻辑完全偏离需求,反而进一步放大了内存越界的范围。
修复后代码
#include <iostream> using namespace std; int main(){ int ok; do { int size; while (true) { cout << "Enter the number of perfect odd squares you want" << endl; cin >> size; if(size<1) { cout << "Enter a valid number" << endl; continue; } else break; } int *A = new int[size]; // 第k个奇数为2*(k+1)-1,循环size次即可得到指定数量的结果 for (int k=0; k<size; k++){ int odd = 2*(k+1)-1; A[k] = odd * odd; cout << A[k] << endl; } delete[] A; cout << " Continue (1) or quit (0)?" << endl; cin >> ok; }while(ok==1); }
内容的提问来源于stack exchange,提问作者Anatolijs Karpovs
相关产品推荐
相关产品推荐

