Моя программа перестает работать из-за этого выхода. Как я могу освободить его? Я пробовал то, что у меня есть в своем коде, но это не помогает. полный код можно найти здесь: full codeКак я могу освободить память массива?
for (i = 0 ; i < n ; i++) {
if (
!((x[i] >= 0) && (x[i] <= a) &
(y[i] >= 0) && (y[i] <= b)
)
) {
cout << x[i] << ' ' << y[i] << ' ' << s[i] << ' ' << "SPADOL" << endl;
} else {
cout << x[i] << ' ' << y[i] << ' ' << s[i] << endl;
} // ALLOCATION IS DONE AT THIS POINT
delete [] x;
delete [] y;
delete [] s;
}
Когда я запускаю этот код, я начинаю входной х и у и сразу после I типа у значения, программа перестает работать. Когда я ввожу только одну строку, программа выполняет отлично, но проблема возникает, когда я хочу ввести более одной строки, ..Program вылетает сразу после выхода первого выхода. Мой полный код с векторами:
#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
#include <string>
using namespace std;
// vector<string> inputs;
int n; // pocet uloh
int a; // rozmer obdlznika a
int b; // rozmer obdlznika b
vector<int> x;
vector<int> y;
vector<string> s;
int i;
int d;
static const char alpha[] = {'D', 'L', 'P'};
char genRandom()
{
return alpha[rand() % strlen(alpha)];
}
// end of generator
int main() {
cin >> n;
while(!((n >= 1)&&(n <=15000)))
{
cout << "max 15000" << flush;
cin >> n;
}
cin >> a >> b;
while(!((a >= 1)&&(a <=100) & (b >= 1)&&(b <= 100)&&(a!=b)))
{
cout << "chyba max 100 alebo a!=b" << endl;
cin >> a >> b;
}
for (i = 0; i < n; i++)
{
cout << "Uloha " << i+1 << ":" << endl;
cin >> x[i];
cin >> y[i];
cin >> s[i];
while(!((x[i]>=0)&&(x[i]<=a))) {
cout << "Try Again x: " << flush;
cin >> x[i];}
while(!((y[i]>=0)&&(y[i]<=b))) {
cout << "Try Again y: " << flush;
cin >> y[i];}
if (s[i] == "S"){
y[i] = (y[i]+1);
}else if (s[i] == "J"){
y[i] = (y[i]-1);
}else if (s[i] == "V"){
x[i] = (x[i]+1);
}else if (s[i] == "Z"){
x[i] = (x[i]-1);
}
cin >> d;
while(!((d>=1)&& (d<=200))) {
cout << "Try Again d: " << flush;
cin >> d;}
for (int counter=0; counter<d; counter++)
{
cout << genRandom();
}
cout << endl;
} // koniec for
for (i = 0 ; i < n ; i++)
{
if(!(((x[i]>=0)&&(x[i]<=a)) | ((y[i]>=0)&&(y[i]<=b)))){
cout << x[i] << ' ' << y[i] << ' ' << s[i] << ' ' << "SPADOL" << endl;
}else{
cout << x[i] << ' ' << y[i] << ' ' << s[i] << endl;
}
}
system("pause");
}
Вы не показываете полный код ... Где выполняется выделение? –
При предоставлении кода для выявления проблемы включите весь код, необходимый для получения ошибки, и разделите код, который не связан с ошибкой. Например, большая часть кода, который вы предоставили (весь блок 'if' /' else') ничего не делает с распределением или освобождением, поэтому это чистый шум для вопроса. В качестве бонуса, если вы это сделали, прежде чем публиковать свой вопрос, вы, вероятно, видели бы, что вы 'delete [] array;' внутри вашей петли - таким образом, чтобы вы могли выяснить ошибку перед публикацией. – mah
Связанный код использует 'malloc'. Вы должны использовать 'free' для выпуска в этом случае, а не' delete'. – Mat