读书人

static,该如何解决

发布时间: 2012-02-28 13:06:36 作者: rapoo

static
#include <iostream>
#include <string>
#include <math.h>
int main()
{
char* xml = "fadfsfsdagsdafdsdfdasd ";
const char* m_xml = new char[25];
m_xml = xml;
delete m_xml;
return 0;
}
在编译的时候出错,为什么?

[解决办法]
请看对你程序的注释:

int main()
{
//xml指向堆栈中一个匿名数组,该数组内容是 "fadfsfsdagsdafdsdfdasd ":
char* xml = "fadfsfsdagsdafdsdfdasd ";

//m_xml指向堆中建构的一个常型char数组:
const char* m_xml = new char[25];

//注意,显然xml和m_xml分别指向不同的内存地址!

//把指向堆栈中匿名数组对象的地址指定给了m_xml,
m_xml = xml;//注意堆上的char数组地址迷失!内存泄漏!

//按C++标准,如下语句仅删除指向匿名数组的第1个元素!余下的内存泄漏掉了!
delete m_xml;

return 0;
}
[解决办法]
这是一个出现频率非常高的错误
char* pChar = new char;
……
int a ;
pChar = &a;
……
delete pChar;
当然这是一个例子,具体的程序各有不同。
这段程序有两个问题。一是pChar = &a;将导致pChar原先分配的空间无法再被获取,就象我们的丢失了朋友的电话号码一样,无法再联系这个朋友了。这就造成了内存泄漏。如果内存泄漏多了,可能导致系统的崩溃,因为可用的资源将越来越少,直到枯竭为止。第二个问题是delete pChar将导致异常发生,因为这时的pChar已经不是指向动态分配的内存了,而是指向了a分配的栈空间,而栈空间是不能使用delete来回收的,因此将导致内存异常。
内存是财富,正确使用财富是关键,为人如此,编程也如此。

读书人网 >C++

热点推荐