Guarda il prog è questo...
Creo una matrice di interi,la memorizzo in un vettore rispettando le posizioni(nel senso che la stendo :-)per capirci prima tutta la riga 1 poi la riga 2 etc..). Fatto questo voglio dividere la matrice originale in n sottomatrici partendo dall'array. Quindi divido le dimensioni di base e altezza in 2(o 4 o 8 etc..)e mi calcolo i quadrati risultanti,che poi memorizzo dinamicamente in una lista. Dico che è un errore di heap(grazie per la dritta sono riandato a leggere la differenza fra stck e heap e ho chiarito la lacuna)perchè per matrici piccole tutto funziona bene ma se divido matrici grandi in tanti pezzi(ad es divido larghezza e altezza di una matrice 1000x1000 per 16)dopo qualche passo mi appare la finestra di windows con la scitta "il programma ProvaMatrici.exe ha smesso di funzionare" e devo killare tutto.Il fatto che questo accada solo per matrici grandi mi fa pensare a un problema di occupazione di memoria per questo volevo anche sapere come si gesticono gli errori....Grazie mille e scusa per le varie imprecisioni.
Per inciso uno CodeBlocks 8.02 su Vista
codice:
#include <stdio.h> 
#include <stdlib.h> 
#include <malloc.h> 
#include <string.h> 
#define ALTEZZA 100 
#define LARGHEZZA 100 
#define NOT_COVERED 0 
#define COVERED 1 
struct lista_array{ 
int *elemento;
 int largh; 
int alt; 
struct lista_array *next; 
};
 int main (int argc,char *argv[])
 {
 int vect[ALTEZZA][LARGHEZZA]; 
int arr[ALTEZZA*LARGHEZZA]; 
int cover[ALTEZZA*LARGHEZZA];
 int larghezzasub,altezzasub; int larghezzasubBase=LARGHEZZA/2,altezzasubBase=ALTEZZA/2; 
int x,i,j,ptr=0,h,k,cnt=1,tmp=0;
 struct lista_array *head=NULL,*queue=NULL,*tmp2; 

for (i=0;i<ALTEZZA*LARGHEZZA;i++) cover[i]=NOT_COVERED; for(i=0;i<ALTEZZA;i++)//inizializzo matrice e ricavo array lineare
 for(j=0;j<LARGHEZZA;j++){ 
vect[i][j]=cnt++; arr[tmp++]=vect[i][j];
 } 
if(larghezzasubBase*altezzasubBase>16) { 
for (ptr=0;ptr<ALTEZZA*LARGHEZZA;ptr++) 
{ if (cover[ptr]==NOT_COVERED)
 { larghezzasub=larghezzasubBase;
 altezzasub=altezzasubBase;
 k=0;
 h=ptr; 
if(((((ptr/LARGHEZZA)+1)*LARGHEZZA)-(ptr))<larghezzasub*2) larghezzasub=((((ptr/LARGHEZZA)+1)*LARGHEZZA)-(ptr));

 if (ALTEZZA-(ptr/LARGHEZZA)<altezzasub*2) altezzasub=ALTEZZA-(ptr/LARGHEZZA); 

tmp2=(struct lista_array *)malloc(sizeof(struct lista_array)); 
tmp2->largh=larghezzasub; 
tmp2->alt=altezzasub; 
tmp2->elemento=malloc((larghezzasub*altezzasub)*sizeof(int));

 if(head==NULL){ 
head=tmp2;
 tmp2->next=NULL;
 queue=tmp2; }
 else{ tmp2->next=NULL; 
queue->next=tmp2; 
queue=tmp2; }
 for(i=0;i<altezzasub;i++)
 { for(j=0;j<larghezzasub;j++)
{ tmp2->elemento[k++]=arr[h++];
 cover[h-1]=COVERED; } 
h+=LARGHEZZA-larghezzasub; } 
}
 }
 }
 else printf("\n\nPORZIONE TROPPO PICCOLA DA ANALIZZARE\n\n");
 x=1; 
tmp2=head; 
while(tmp2!=NULL) 
{ printf("\n\nSTAMPO %d° SOTTOPORZIONE DELLA MATRICE - DIMENSIONI %d X %d\n\n",x,tmp2->largh,tmp2->alt); 
for(i=0;i<(tmp2->largh*tmp2->alt);i++)
 { printf("%5d",tmp2->elemento[i]); } 
tmp2=tmp2->next; x++; }
 return 0; }