PDA

View Full Version : Errore nella memoria....


Rikka
24-09-2004, 00:18
Ciao....

ho fatto questo programmino che alloca una matrice dinamica ma quando vado a farlo girare, dopo alcuni passaggi mi da errore nella memoria!!!!

Da che dipende? Come lo risolvo?

Grazie!!!

#include <stdio.h>
#include <conio.c>
#include <stdlib.h>


void inserisci(int,int,int **);
void stampa(int,int,int **);

int main (void)
{

int **mat;
int i,j;
int rig, col;


gotoxy(25,8);
printf("ALLOCAZIONE DINAMICA MATRICE");
getch();
clrscr();
printf("I caratteri ammessi nelle matrici sono soltanto numeri.\n\n");
printf("Premere un tasto per continuare...\n\n");
getch();
clrscr();

gotoxy(25,2);
printf(" SCEGLI DIMENSIONI ");
gotoxy(18,5);
printf("inserisci il numero delle righe : ");
gotoxy(62,5);
scanf("%d/n",rig);
gotoxy(18,8);
printf("inserisci il numero delle colonne : ");
gotoxy(64,8);
scanf("%d/n",col);
gotoxy(65,8);
getch();


mat = (int**) malloc(rig*sizeof(int*));
for(i=0;i<rig;i++)
{
mat[i] = (int*) malloc(col*sizeof(int));
}
inserisci(rig,col,mat);
stampa(rig,col,mat);
system("PAUSE");
}



void inserisci(int rig, int col, int **mat)
{
int i,j;
gotoxy(30,2);
printf(" LEGGI ");
for(i=0;i<col;i++)
{for(j=0;j<rig;j++)
{gotoxy(25,6+(2*j));
printf("elemento[%d][%d] : ",j,i);
gotoxy(45+(3*i),6+(2*j));
scanf("%5d",&mat[j][i]);
gotoxy(25,6+(2*j));
printf(" ");
}
}
}

void stampa(int rig, int col, int **mat)
{
int i,j;
clrscr();
gotoxy(28,2);
printf(" VISUALIZZA ");
for(i=0;i<rig;i++)
{for(j=0;j<col;j++)
{gotoxy((j+1)*4+25,(i+1)*2+3);
printf("%d",mat[i][j]);
}
}
}

cionci
24-09-2004, 07:13
Sinceramente non riesco a vedere erorri... :boh:

Rikka
24-09-2004, 10:49
No infatti gli errori nn ci sono......però quando faccio girare il programma mi da un errore tipo: errore.....all'istruzione......la memoria non poteva essere read.....ecc.....

cionci
24-09-2004, 11:32
Originariamente inviato da Rikka
No infatti gli errori nn ci sono......però quando faccio girare il programma mi da un errore tipo: errore.....all'istruzione......la memoria non poteva essere read.....ecc.....
Non parlavo di errori di compilazione, ma di concetto...

Rikka
24-09-2004, 12:21
Vuol dire che a te funziona perfettamente? Ti fa inserire i dati nella matrice e te la visualizza???

cionci
24-09-2004, 14:15
Per ora non l'ho potuta provare, ma ho solo letto il codice...

Ora la provo...

cionci
24-09-2004, 14:22
Ho trovato l'errore:
printf("inserisci il numero delle righe : ");
gotoxy(62,5);
scanf("%d/n",&rig); <-----------
gotoxy(18,8);
printf("inserisci il numero delle colonne : ");
gotoxy(64,8);
scanf("%d/n",&col); <-----------

Mancavano le &...

Comunque non ti abituare ad usare gotoxy, clrscr e le varie funzioni di conio.h... Non sono funzioni standard !!!

Rikka
24-09-2004, 17:21
grazie!!!!!!

maicolgt85
28-10-2004, 16:55
Comunque non ti abituare ad usare gotoxy, clrscr e le varie funzioni di conio.h... Non sono funzioni standard !!!

e allora come deve fare una buon'anima a spostare il suo dannato cursore??? sto tentando da giorni ma non riesco a trovarlo... avevo pensato di usare Fseek e company ma ovviamente queste mi danno errore... (inoltre ftell, fgetpos e compagnia mi ridanno sempre -1 usando Stdout come stream)

sbaglio qualcosa?

(nn devo usare la funzione di windows SetConsoleCursorPos)

ciao
grazie

cionci
28-10-2004, 17:01
Usando gotoxy tu usi SetConsoleCursorPos, anche se indirittamente...
Il C standard non prevede funzioni di questo tipo... Qualsiasi implementazione di una funzione del genere è system dependent...quindi sei obbligato ad usare SetConsoleCursorPos (a meno che tu non voglia andare a scrivere nella memoria video, anche questo è ovviamente system dependent)...

bertoz85
29-10-2004, 08:44
cionci, il problema non è che internamente usa le api win, è che uso visual studio 6, e gotoxy() (come clrscr) non esistono in <conio.h>...

Se poi volessi usare l'api di win, che richiede un handle, come lo trovo essendo la mia console automaticamente creata da windows? Al max io ho solo "stdout"... poi ricordati che sto usando C e non c++.

grazie dell'aiuto... ah se nn l'avessi capito sono un amico di maicolgt

ciao

cionci
29-10-2004, 11:07
Le API Win32 sono tutte destinate principalmente all'uso in C...

Guarda queste funzioni (SetCursorPos in particolare): http://msdn.microsoft.com/library/en-us/dllproc/base/console_functions.asp

Ecco un esempio di cme ottenere gli handle della console (GetStdHandle): http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/console_functions.asp

bertoz85
29-10-2004, 13:30
grazie mille comunque, ho trovato la soluzione (che è peraltro la stessa tua!)

grazie ancora!

ciao