PDA

View Full Version : Exception class EAccessViolation


NowC
04-05-2007, 20:42
Salve a tutti!
Sto :muro: con un problema che non riesco proprio a risolvere...qlcn potrebbe darmi una mano?
Cerco di spiegare il problema:
Ho realizzato un progetto in c (con borland c++ builder 6) e in questo progetto ho creato una funzione


#include <stdio.h>
#include <stdlib.h>
#include "matrix.h"
#include "mylibmatlab.h"
void myFunction()
{

mxArray* in1;
mxArray* in2;
double ris[9] = {8,1,2,3,2,5,-1,7,9};
double dimen[9] = {1,2,3,4,5,6,7,8,6};

//inizializza i dati di ingresso
in1 = mxCreateDoubleMatrix(3,3, mxREAL);
in2 = mxCreateDoubleMatrix(3,3,mxREAL);
mclInitializeApplication(NULL,0);
(...)


Tale funzione richiama una funzione di una libreria dll (mylibmatlab) realizzata con matlab, ma fin qui tutto bene. Compilo e quando provo a far correre il mio programma (tramite un semplice main richiamo la mia funzione proprio per testarla) borland si arresta alla linea "in1 = mxCreateDoubleMatrix(3,3, mxREAL);" segnalando un errore:

Project xxxxx.exe raised Exception class EAccessviolation with message 'Access violation at address 00000000. Read of address 00000000'.

Non riesco a capire perchè, non ho molta esperienza del resto :cry:
:help:

Grazie, alla prossima!

andbin
05-05-2007, 10:59
Tale funzione richiama una funzione di una libreria dll (mylibmatlab) realizzata con matlab, ma fin qui tutto bene. Compilo e quando provo a far correre il mio programma (tramite un semplice main richiamo la mia funzione proprio per testarla) borland si arresta alla linea "in1 = mxCreateDoubleMatrix(3,3, mxREAL);" segnalando un errore:

Project xxxxx.exe raised Exception class EAccessviolation with message 'Access violation at address 00000000. Read of address 00000000'.Non conosco Matlab ma da una veloce ricerca con google ho trovato che il prototipo di mxCreateDoubleMatrix è:

mxArray *mxCreateDoubleMatrix(mwSize m, mwSize n, mxComplexity ComplexFlag);

Quindi quella chiamata mi sembra del tutto corretta. Il problema credo sia altrove, magari dovuto a qualcos'altro, fatto o non fatto in precedenza.

NowC
05-05-2007, 12:12
Borland col debug mi segna breakpoint lì...del resto se provo a inserire dei semplici printf l'ultima stampa che effettua è proprio la riga precedente a quella chiamata.
Potrebbe essere un problema della libreria che contiene la funzione? Non compatibile con Borland? Ma non ho trovato nessuna esperienza simile in giro quindi penso che dovrebbe funzionare anche perchè nelle guide di matlab parla di borland come compilatore disponibile e mbuild -setup rileva il compilatore da me installato. Non ne capisco molto di dll ecc ecc...a voi viene qualche idea in proposito? Grazie per la risposta cmq :)