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

一些有关问题

2012-03-04 
一些问题1.内存分配器的源代码,有一个用来释放内存的函数:voiddeallocate( void * p,size_t /* n */ ){fre

一些问题
1.内存分配器的源代码,有一个用来释放内存的函数:

  void deallocate( void * p , size_t /* n */ )
  {
  free( p ) ;
  }

  这个第二个参数 size_t 根本就用不到,甚至没有形参名,为什么要声明它呢?难道只是为了当一个标记的作用?


2.下面的代码,通过编译了,运行时出错,错在哪?

  string* sstr = (string*) malloc( sizeof(string) * 10 );

  cout<<sstr<<" "<<sizeof(*sstr)<<endl; ////// 输出 4 32

  sstr[0] = "a"; /// 通过编译,但运行发生内存错误,提示“该内存不能为written”,为什么呢?

  *sstr = "a"; /// 同上
}




[解决办法]
1 要么是历史原因,要么是留着以后可能需要用


2 string 不是简单的数据类型,建立 string 对象要用构造函数

用 malloc 这种野蛮的方法行不通
[解决办法]
1中的话保留为以后所用。以后如果要加参数,就不用改你调用的代码,只要函数定义就可以了。
2中string是类,所以要用构造函数,正如1楼所说,用malloc野蛮进行是不行的。
[解决办法]
string 是一个类,用的时候不是那么简单的malloc撒
[解决办法]
你第二个没有调用构造函数进行构造啊。怎么能输出呢?至于第一个的第2个参数是要释放的字节数

热点排行