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

static,该如何解决

2012-02-28 
static#include iostream#include string#includemath.hintmain(){char*xmlfadfsfsdagsdafdsdfdas

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来回收的,因此将导致内存异常。
内存是财富,正确使用财富是关键,为人如此,编程也如此。

热点排行