-7
私は、アプリケーションコードに
delete[]
の文から、ヒープバッファの終了後にメモリに
を書いたことを
CRTが検出されたレポートを取得するのはなぜ
以下?
は、ここでは、コードです:
#include <stdlib.h> int *dynamic(int n) { // making mem allocation; int *mass = new int[n]; return mass; } int *dynamic_create(int *mass, int n) { // writing in massive random numbers int *mass_aux = mass; for (int *i = mass; i < mass + n; i++) *i = rand()%10; return mass_aux; } void dynamic_add_last(int *mass, int n, int number) { // adding one element for (int *i = mass; i < mass + n + 1; i++) if (i - mass == n) *i = number; } int *dynamic_add(int *mass, int n, int number, int pos) { int *mass_aux = new int [n]; int *mass_plus = mass; for (int *i = mass_aux; i < mass_aux + n + 1; i++) { if (i - mass_aux == pos) { *i = number; } else { *i = *mass_plus; mass_plus++; } } delete [] mass; // <-- PROBLEM REPORTED HERE return mass_aux; } #include <iostream> int main() { using std::cin; using std::cout; using std::endl; srand(time(0)); int n; cout << "Massive size: "; cin >> n; int *mass = dynamic(n); int *mass2 = dynamic_create(mass, n); for (int *i = mass2; i < mass2 + n; i++) cout << (i - mass2) << " - " << *i << endl; int s; cout << "Number what you want to add: "; cin >> s; dynamic_add_last(mass, n, s); n++; for (int *i = mass2; i < mass2 + n; i++) cout << (i - mass2) << " - " << *i << endl; int pos; cout << "Position: "; cin >> pos; cout << "Number what you want to add: "; cin >> s; int *mass3 = dynamic_add(mass, n, s, pos); n++; for (int *i = mass3; i < mass3 + n; i++) cout << (i - mass3) << " - " << *i << endl; }
あなた '削除[] mass'は、サンプルコードで示されていない割り当てのためである - 破損がそもそも行われたところ、我々が知ることができません(このコードではない)。 – Niall
std :: vectorを使用した場合、無効なインデックスにアクセスするときに、デバッガから通知が返されます。 –