<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-1"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=FR link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='color:#1F497D'>Hi,<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>Thank you for your help<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>The debugging mode allowed me to fix the problem<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>May be it can be useful for someone else :<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>the calloc was called in a function in one dll (the dll corresponding to the “c” files) and the free was called by a function belonging to another dll (the dll corresponding to the “sci_gateway” files). This led to an error in the heap of the pointer detected by _CtlIsValidHeadPointer<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>If the calloc  and free are called in the same function, scilab does not crash anymore<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'>Guylaine<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>De :</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Allan CORNET [mailto:allan.cornet@scilab.org] <br><b>Envoyé :</b> lundi 14 février 2011 08:24<br><b>À :</b> users@lists.scilab.org<br><b>Objet :</b> RE: [scilab-Users] problem with free function<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='color:#1F497D'>Hi,<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>You can debug your code with Visual studio :<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><a href="http://wiki.scilab.org/How_to_debug_an_external_source_code_linked_to_scilab_with_Visual_Studio">http://wiki.scilab.org/How_to_debug_an_external_source_code_linked_to_scilab_with_Visual_Studio</a><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Allan<span style='color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>De :</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Collewet Guylaine [mailto:guylaine.collewet@cemagref.fr] <br><b>Envoyé :</b> vendredi 11 février 2011 17:22<br><b>À :</b> users@lists.scilab.org<br><b>Objet :</b> [scilab-Users] problem with free function<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span lang=EN-US>Hello,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>I have a problem with the “free” function which makes scilab crash<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>I wrote two functions “sci_imdilate” and “image_dilate”<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>sci_imdilate is the interface between scilab and the function image_dilate<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>the memory pointed by l_dilated_image (see the code below) is allocated by image_dilate and I’d like to free it in sci_imdilate<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>however, a call to free makes  scilab crash<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>If I remove the “free”, the whole function works properly<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>I cannot undersand why<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Does someone see my mistake ?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>I am working with scilab 5.2.2  32 bits on windows 7 (64 bits machine)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Regards<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Guylaine Collewet<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>/////////////////////////<o:p></o:p></span></p><p class=MsoNormal>// function sci_imdilate<o:p></o:p></p><p class=MsoNormal>///////////////////////<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>double *l_dilated_image;<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>…/…<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>dilate_image(&l_image[0], m_image, n_image, &l_kernel[0], m_kernel, n_kernel, &l_dilated_image, &l_mask[0], &ierr);<o:p></o:p></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>createMatrixOfDouble(pvApiCtx, 4, m_image, n_image, l_dilated_image);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>if(l_dilated_image) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>       free(l_dilated_image);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>               }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>/////////////////////////<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>// function dilate_image<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>/////////////////////////<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>int dilate_image(double *image, int width, int height, double *kernel,  int kernel_width, int kernel_height, double **dilated_image, double *mask, int *ierr)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>{<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal>…/…<o:p></o:p></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>               if (!(*dilated_image = (double*)calloc(1, sizeof(double)*width*height)))<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>               {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                              *ierr=1;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>                              return(-1);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>               }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal>…/…<o:p></o:p></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p></div></body></html>