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

new & delete解决办法

2012-06-17 
new & delete以字符串处理函数为例,不调用string库里的函数,编写一个c++程序来实现字符串处理函数strlen的

new & delete
以字符串处理函数为例,不调用string库里的函数,编写一个c++程序来实现字符串处理函数strlen的功能,代码如下:

C/C++ code
//strlen//#include<iostream>using namespace std;class istrlen{      public:             int number;             char a[10];             char *p;             istrlen(int initial);             int count();             void f1();};             istrlen::istrlen(int initial){                   number=initial;                   cin>>a;                   p=a;}int istrlen::count(){    while(*p!='\0'){                number++;                p++;                }    return number;}void istrlen::f1(){    cout<<number<<endl;}int main(){    istrlen A(0);      A.count();    A.f1();    system("pause");//DEVC++ make the result clear to see}

写出代码后就会出现一个问题了,如果我所输入的字符串长度大于我预先定义的呢?
编译可知,编译器是不会报错,但是输出的结果不是你所输入字符串的长度
这时候我就想着用动态内存分配的方法来解决此问题
使用operator new 和 delete 如何实现呢?

[解决办法]
为什么要去重载new和delete??这个只需要去管理好你的指针所开辟的内存大小而已,没有必要重载new和delete
[解决办法]
跟operator new之类关系不大,楼主可以参考下面的代码
C/C++ code
    int size = 10;    char *buf = new char[size+1];    int index = 0;    istream_iterator<char> iter(cin);    while(iter != istream_iterator<char>()){        buf[index++] = *iter++;        if(index == size){            size = size>0?size<<1:1;            char *newBuf = new char[size];            memcpy(newBuf,buf,index);            delete []buf;            buf = newBuf;        }    }    buf[index] = 0;
[解决办法]
cin>>a
如果没有分配足够大,这里直接就错误退出了
你可以试试
char a[10]
cin>>a 然后输入超过11字符试试。

热点排行