📄 subject_62080.htm
字号:
<p>
序号:62080 发表者:little_friend 发表日期:2003-11-24 16:43:09
<br>主题:请问一个关于free的问题
<br>内容:请问这个程序有什么错误?<BR>#include "stdio.h"<BR>#include "malloc.h"<BR>#include "string.h"<BR>void main()<BR>{<BR> char *blanks = NULL;<BR> char *w_blanks = NULL;<BR> w_blanks ="blank";<BR> <BR> blanks = (char*)malloc(sizeof(char)*strlen(w_blanks));<BR> strcpy(blanks,w_blanks);<BR> if(strcmp(blanks,"blanks"))<BR> {<BR> free(blanks);<BR> blanks=NULL;<BR> } <BR>}<BR><BR><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>回复者:iamhere 回复日期:2003-11-24 16:58:38
<br>内容:首先char *w_blanks = NULL;<BR> w_blanks ="blank";<BR>这个写法有错误,编译应该不能通过。正确的写法是:<BR>char w_blanks[] = "blank";<BR><BR>其次,strlen(w_blanks)返回的字符串长度为5("blank"),<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> blanks = (char*)malloc(sizeof(char)*strlen(w_blanks));<BR> strcpy(blanks,w_blanks);<BR>改为<BR> blanks = (char*)malloc(sizeof(char)*(strlen(w_blanks)+1));<BR> strcpy(blanks,w_blanks);<BR>可以了,<BR>不过<BR> char *w_blanks = NULL;<BR> w_blanks ="blank";<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 *w_blanks = 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 + -