⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_62080.htm

📁 vc
💻 HTM
字号:
<p>
序号:62080 发表者:little_friend 发表日期:2003-11-24 16:43:09
<br>主题:请问一个关于free的问题
<br>内容:请问这个程序有什么错误?<BR>#include &#34;stdio.h&#34;<BR>#include &#34;malloc.h&#34;<BR>#include &#34;string.h&#34;<BR>void main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp; *blanks&nbsp;&nbsp;= NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp; *w_blanks&nbsp;&nbsp;= NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;w_blanks&nbsp;&nbsp;=&#34;blank&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;blanks&nbsp;&nbsp;= (char*)malloc(sizeof(char)*strlen(w_blanks));<BR>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(blanks,w_blanks);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(strcmp(blanks,&#34;blanks&#34;))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(blanks);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;blanks=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<BR>}<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;
<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>回复者:iamhere 回复日期:2003-11-24 16:58:38
<br>内容:首先char&nbsp;&nbsp; *w_blanks&nbsp;&nbsp;= NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;w_blanks&nbsp;&nbsp;=&#34;blank&#34;;<BR>这个写法有错误,编译应该不能通过。正确的写法是:<BR>char&nbsp;&nbsp; w_blanks[]&nbsp;&nbsp;= &#34;blank&#34;;<BR><BR>其次,strlen(w_blanks)返回的字符串长度为5(&#34;blank&#34;),<BR>而strcpy(blanks,w_blanks)实际拷贝的字符串长度为6(包括默认的字符串结束符'\0'),<BR>于是使用的内存超过了你前面通过malloc分配的内存大小<BR>free自然也就有问题了<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:little_friend 回复日期:2003-11-24 17:11:03
<br>内容:感谢楼上的朋友,<BR>我将<BR>&nbsp;&nbsp;&nbsp;&nbsp;blanks&nbsp;&nbsp;= (char*)malloc(sizeof(char)*strlen(w_blanks));<BR>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(blanks,w_blanks);<BR>改为<BR>&nbsp;&nbsp;&nbsp;&nbsp;blanks&nbsp;&nbsp;= (char*)malloc(sizeof(char)*(strlen(w_blanks)+1));<BR>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(blanks,w_blanks);<BR>可以了,<BR>不过<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp; *w_blanks&nbsp;&nbsp;= NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;w_blanks&nbsp;&nbsp;=&#34;blank&#34;;<BR>编译是通过的<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:浪际天涯 回复日期:2003-11-24 20:13:28
<br>内容:char&nbsp;&nbsp; *w_blanks&nbsp;&nbsp;= NULL;<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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -