首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

动态内存的有关问题

2012-02-25 
动态内存的问题在看高质量的C++编程的时候,遇到了这样一个问题char*GetMemory(intn){char*p(char*)malloc

动态内存的问题
在看高质量的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此时指向了 常量静态数据段
}

热点排行