Ciao ragazzi, sono nuovo e mi sto affacciando al mondo della programmazione, volevo chiedervi una mano. Quando vado ad eseguire il programma mi da problemi durante la compilazione nel punto in cui ho messo sta faccina ( ), l'errore è il seguente: Eccezione non gestita in corrispondenza di 0x76C8B512 in Puntatori.exe: Eccezione Microsoft C++: std::bad_alloc in corrispondenza della posizione di memoria 0x003DF960.
sapete darmi una delucidazione? Scusate per la poca efficienza della scrittura del codice
#include<iostream>
using namespace std;
struct tripla {
int inizioT, inizioP, lung;
tripla(int a = 0, int b = 0, int c = 0) {
inizioT = a;
inizioP = b;
lung = c;
}
};
void computeM(int* T, int* P, int dimT, int dimP, bool* M) {
int k = 0;
for (int i = 0; i < dimP; i++) {
for (int j = 0; j < dimT; j++) {
if (P == T[j]) {
M[k] = 1;
k++;
}
else {
M[k] = 0;
k++;
}
}
}
}
tripla* prima(tripla* g, int i, bool* M, int dimT, int dimP, int k) {
int dimF = dimT + 1;
for (int j = i; j < (dimT * dimP); (j + dimF)) {
if (M[j] == 1) {
g = new tripla(i / dimT, (i % dimT) - 1, k++);
}
else {
g = new tripla(i / dimT, (i % dimT) - 1, k);
break;
}
}
return g;
}
tripla* realmatch(tripla* f, bool* M, int dimT, int dimP, int i) {
int h = i + 1;
for (int j = h; j < (dimT * dimP); j++) {
if (M[j] == 1) {
int k = 0;
tripla* g = new tripla(1, 1, 1);
tripla* n = prima(g, i, M, dimT, dimP, k);
if (n->lung > f->lung) {
f = new tripla(n->inizioT, n->inizioP, n->lung);
}
if (n->lung = f->lung && n->inizioT < f->inizioT) {
f = new tripla(n->inizioT, n->inizioP, n->lung);
}
}
}
return f;
}
tripla* match(bool* M, int dimT, int dimP) {
for (int i = 0; i < (dimT * dimP); ) {
if (M == 1) {
int k = 0;
tripla* g=new tripla(1, 1, 1);
tripla* f = prima(g, i, M, dimT, dimP, k);
tripla* r = realmatch(f, M, dimT, dimP, i);
break;
return r;
}
else {
i++;
}
}
}
void stampa(bool* M) {
for (int i = 0; i < 40; i++) {
cout << M << "-";
}
}
void stampareal(tripla* g) {
cout << g->inizioT << "-" << g->inizioP << "-" << g->lung;
}
int main() {
int T[10] = { 2,2,3,2,3,1,3,1,3,2 };
int P[4] = { 0,3,1,3 };
int dimT = 10;
int dimP = 4;
bool M[40];
computeM(T, P, dimT, dimP, M);
stampa(M);
cout << endl;
tripla* g = match(M, dimT, dimP);
stampareal(g);
}