:master: Non ho capito qualìè il problema che hai individuato e la soluzione che hai portato.Mi spieghi in altre parole, forse sono un po tardo ioOriginariamente inviato da zero85
premessa: non vedendo il codice che richiama la tua funzione ho scritto un ipotetica implementazione:
Io con il tuo codice ho un problema: quando il programma fa il delete di s la corrispondenza: indirizzo di s == indirizzo di a viene persa, quindi se tento di fare operazioni su a mi ritrovo un pointer NULL...codice:int main() { myType *a = new myType[10]; cout << "Riallocazione..." << endl; myType obj1; myFunction(a,10,obj1); return 0; }
io farei così:
codice:#include <iostream> using namespace std; typedef struct _mytype{ int a; int b; _mytype() { a = 3; b = 5; } void stampa() { cout << a << ";" << b << endl; } } myType; void* realloca(myType *s, const int x, myType &obj); int main() { myType *a = new myType[10]; for(int k = 0; k < 10; k++) { a[k].stampa(); } cout << "Riallocazione..." << endl; myType obj1; a = (myType*)realloca(a,10,obj1); for(int k = 0; k < 11; k++) { a[k].stampa(); } system("pause"); return 0; } void* realloca(myType *s, const int x, myType &obj) { myType * tmp = new myType[x]; for(int i = 0; i < x; i++) { *(tmp + i) = *(s + i); } delete[] s; s = new myType[x+1]; for (int i = 0; i < x; i++) { *(s+i) = *(tmp+i); } *(s+x+1) = obj; return (void*)s; }