Amigo asi lo he dejado:
Código PHP:
void __fastcall TFormPrincipal::ButtonBarajarMatrizClick(TObject *Sender)
{
//En este form pedimos el numero de columnas y filas
FormDimension->ShowModal();
//Obtenemos memoria para nuestro array
v = new int*[filas];
v[0] = new int[filas * columnas];
for(int i = 1; i < filas; i++)
v[i] = v[0] + i * columnas;
//En este form rellenamos el array
FormRellenado->ShowModal();
String s;
Memo1->Lines->Clear();
Memo1->Lines->Add("Matriz original");
//Mostramos el array original
for(int f = 0; f < filas; f++) {
s = "";
for(int c = 0; c < columnas; c++)
s = s + String(v[f][c]) +",";
Memo1->Lines->Add(s);
}
Memo1->Lines->Add("");
Memo1->Lines->Add("Matriz modificada");
//Barajamos los valores del array
random_shuffle(&v[0][0], &v[filas-1][columnas]);
//Mostramos el array barajado
for(int f = 0; f < filas; f++) {
s = "";
for(int c = 0; c < columnas; c++)
s = s + IntToStr(v[f][c]) +",";
Memo1->Lines->Add(s);
}
//Liberamos la memoria del array
delete [] v[0];
delete [] v;
}
Funciona perfecto y ya he entendido como hace para que la memoria sea contigua. Lo que hace es que a la primera fila le asigna la memoria necesaria para todo el array y luego trabaja con el como siempre y así tenemos toda la memoria correlativa.
Una duda que tengo es si la liberacion de memoria es correcta como la hago o dejo parte sin liberar.