subject_64322.htm

来自「vc」· HTM 代码 · 共 12 行

HTM
12
字号
<p>
序号:64322 发表者:Rikcuo Akira 发表日期:2003-12-10 10:17:30
<br>主题:malloc &amp; free
<br>内容:malloc &amp; free<BR><BR>strcpy(str,pSrc); //加此行<BR>if (pSrc!=NULL) free(pSrc); 就會出錯 Go (Win32 Debug),Execute Program<BR>到底strcpy與free有何關聯?<BR><BR>void CMyAdvCRCDlg::OnButtonOpenfile() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your control notification handler code here<BR>&nbsp;&nbsp;&nbsp;&nbsp;static char BASED_CODE szFilter[] = &#34;Log Files (*.log)|*.log|Text Files (*.txt)|*.txt|Data Files (*.log;*.txt)|*.log; *.txt|All Files (*.*)|*.*||&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;char* filename=NULL; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CFileDialog dlg(TRUE,&#34;log&#34;,&#34;*.log&#34;,NULL,szFilter);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if(dlg.DoModal()==IDOK)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString strLogFilename=dlg.GetPathName();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filename=strLogFilename.GetBuffer(0);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_edit_filename.SetWindowText(filename);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//檢查是否有改32-Digit Code<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// open file<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE * fp=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ((fp=fopen(filename,&#34;rb&#34;))==NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long len; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char *pSrc=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len = _filelength( _fileno( fp ) );<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (len&lt;32)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&#34;檔案長度小於32&#34;,&#34;Error&#34;,MB_OK|MB_ICONERROR);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSrc = (char* )malloc( len );<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( pSrc == NULL )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fread(pSrc,len,1,fp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSrc += (len-32);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char str[32+1];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(str,pSrc); //加此行就會出錯 Go (Win32 Debug)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str[32]='\0';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (pSrc!=NULL) free(pSrc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (fp!=NULL) fclose(fp);<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:红苹果 回复日期:2003-12-10 18:06:39
<br>内容:<BR>动态分配的内存地址不能改变它,否则系统就不能释放它了。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSrc = (char* )malloc( len ); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if( pSrc == NULL )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fread(pSrc,len,1,fp);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;pSrc += (len-32);&nbsp;&nbsp;// &lt;=====要改变pSrc,就要先保护它的值,错出在这里<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*(pSrc+len)=0;&nbsp;&nbsp;// &lt;========<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char str[32+1];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(str,pSrc); //加此行就會出錯 Go (Win32 Debug)<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;str[32]='\0';&nbsp;&nbsp;//&lt;=========<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (pSrc!=NULL) free(pSrc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (fp!=NULL) fclose(fp);<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?