难道真的没有办法了!!!!!!!!!!!!?
关于内存的一个问题,语句如下:
char *str=(char *)malloc(100);
strcpy(str,"hello csdn");
str++;
free(str);
运行后,系统提示执行了非法操作,为什么?
如果要释放此内存,那该怎么办?
问题点数:24、回复次数:8Top
1 楼taosan(飞狐)回复于 2002-02-02 13:32:51 得分 0
换种方法试试,用new,delete行不行?Top
2 楼inter_national(inter_national)回复于 2002-02-02 13:34:33 得分 0
用new 和delete
不要用 malloc 和 free
Top
3 楼JebelMar(萨克斯风)回复于 2002-02-02 13:34:33 得分 0
用CString类生成一个动态的字符串对象吧!
CString str;
str.Format("hello csdn");
Top
4 楼redmoon528()回复于 2002-02-02 13:37:39 得分 0
new 是对对象操作的。Top
5 楼solar(天哪,忘了我是什么时候注册的了!)(int argc, char *argv[])回复于 2002-02-02 13:50:44 得分 1
先看一下malloc是否成功了。
另外你要仔细检查一下其它地方的代码,有可能是你在别处进行了内存非法操作,一直潜伏到这几句才暴露出来;单就这几句而论,是没问题的!我遇到过这样的问题,当时还以为c的库函数有bug,化了整整一天的时间终于找到了原因:确实在别处有非法操作!Top
6 楼unionsoft(gm)回复于 2002-02-02 14:02:52 得分 0
答solar:就是这几句的问题,不信,你可以新建一个项目。关键是str++;这句有问题Top
7 楼Chice_wxg(学)(习)回复于 2002-02-02 14:11:13 得分 15
char *str=(char *)malloc(100);
strcpy(str,"hello csdn");
char *p;
p=str;
p++;
free(str);
这样就没问题了Top
8 楼jeffchen(Jeff)回复于 2002-02-02 14:15:43 得分 8
同意unionsoft(gm)。
malloc在分配内存时,在你所得到的内存前还为free函数所需信息分配了空间。str++把指针移到后面去了,在释放时free函数找到的信息就是错的。当然出错了。Top




