读书人

动态内存的有关问题

发布时间: 2012-02-25 10:01:49 作者: rapoo

动态内存的问题
在看高质量的C++编程的时候,遇到了这样一个问题
char* GetMemory(int n)
{
char* p=(char*)malloc(n*sizeof(char));
return p;
}
void main()
{
char* ptr=NULL;
ptr=GetMemory(100);
ptr= "here ";
free(ptr);
}
此程序在编译的时候没有问题,但是在DEBUG模式下运行就会在free(ptr)处出错,出错信息Debug Assertion Failed.在Release模式下没有问题,正常编译运行.去掉free(ptr)后在Debug下也没有问题,但是内存没有被释放.虽然ptr= "here ";可以用strcpy()函数代替,并且可以运行正常,但是我很想知道在上面那段代码里到底问题出在哪里了,多谢帮助.

[解决办法]
void main()
{
char* ptr=NULL;
ptr=GetMemory(100);
ptr= "here ";//此处ptr已经指向了 字符串 “here” ,它在常量静态数据段
free(ptr);//free只能release从堆申请的内存,而ptr此时指向了 常量静态数据段
}

读书人网 >C语言

热点推荐