C++,类的初学者,做题目写了个程序编译没报错,但运行会崩,求解

#include<iostream.h>#include<string.h>classLinearStr{intSize;intPoint;char**strp;publ... #include<iostream.h>
#include<string.h>
class LinearStr
{ int Size;
int Point;
char ** strp;
public:
LinearStr(int n=100)
{ if(n==0)
{ Size=Point=0;
strp=0;
}
else
{ Size=n;
Point=0;
strp=new char *[n];
for(int i=0;i<n;i++) strp[i]=0;
}
}
~LinearStr()
{ for(int i;i<Point;i++)
if(strp[i]) delete[]strp[i];
}
int input(char *);
char * String(unsigned n)
{return strp[n];}
unsigned Elem(void)
{return Point;}
unsigned Max(void)
{return Size;}
void Print(void);
};
int LinearStr::input(char *p)
{ if(Point<Size)
{ strp[Point]=new char[100];
strcpy(strp[Point++],p);
return Point;
}
else
{ char ** Strp;
Strp=new char*[Size+1];
for(int i=0;i<Size;i++)
{ Strp[i]=new char[100];
strcpy(Strp[i],strp[i]);
}
for(i=0;i<Point;i++) delete[]strp[i];
delete []strp;
Size++;
strp=Strp;
strp[Point]=new char[100];
strp[Point++]=p;
return Point;
}
}
void LinearStr::Print(void)
{ for(int i=0;i<Point;i++) cout<<strp[i]<<'\n';
}
void main()
{ LinearStr list;
char *p;
p=new char[100];
cout<<"请输入字符串,以-1结束"<<'\n';
for(int i=0;;i++)
{ cin.getline(p,100);
if(strcmp(p,"-1")==0) break;
list.input(p);
}
cout<<"字符串个数为:"<<list.Elem()<<'\n';
cout<<"list长度为:"<<list.Max()<<'\n';
cout<<"第三个字符串为:"<<list.String(3)<<'\n';
list.Print();
}
展开
 我来答
lifejackenYuan
2014-03-17 · 超过29用户采纳过TA的回答
知道答主
回答量:43
采纳率:100%
帮助的人:46万
展开全部

修改了你的代码,修改部分都注释了,你看下。

#include<iostream>          // 修改了头文件, c++的标准建议不加.h

#include<string>

using namespace std;        // 包含std的命名空间,否则下面在用到cout之类而没加std会报错


class LinearStr

{        

    int Size;

 

    int Point;

    char ** strp;

public:

    LinearStr(int n=100)

    {    

        if(n==0)

        {    

            Size    = 0;    // 建议分开写,

            Point   = 0;

            strp    = 0;

        }

        else

        {    

            Size=n;

            Point=0;

            strp=new char *[n];

            for(int i=0;i<n;i++) 

                strp[i]=0;

        }

    }

    ~LinearStr()

    {    

        for(int i = 0;i<Point;i++)      // i未赋初值,不安全

        if(strp[i]) 

            delete[]strp[i];

    }


    int input(char *);

    char * String(unsigned n){return strp[n];}

    unsigned Elem(void){return Point;}

    unsigned Max(void){return Size;}

    void Print(void);

};


int LinearStr::input(char *p)

{    

    if(Point<Size)

    {    

        strp[Point]=new char[100];

        strcpy_s(strp[Point++], 100, p);      // 这里换用strcpy_s

        return Point;

    }

    else

    {    

        char ** Strp;

        Strp=new char*[Size+1];

        for(int i=0;i<Size;i++)

        {    

            Strp[i]=new char[100];

            strcpy_s(Strp[i],100, strp[i]);

        }

        for(int i=0;i<Point;i++)    

            delete[]strp[i];

        delete []strp;

        Size++;

        strp=Strp;

        strp[Point]=new char[100];

        strp[Point++]=p;

        return Point;

    }

}


void LinearStr::Print(void)

{    

    for(int i=0;i<Point;i++) 

        cout<<strp[i]<<'\n';

}


void main()

{    

    LinearStr list;

    char *p;

    p=new char[100];

    cout<<"请输入字符串,以-1结束"<<'\n';

    

    for(int i=0;;i++)

    {    

        cin.getline(p,100);

        if(strcmp(p,"-1")==0)    

            break;

        int m = sizeof(*p);

        list.input(p);

    }

    cout<<"字符串个数为:"<<list.Elem()<<'\n';

    cout<<"list长度为:"<<list.Max()<<'\n';

    cout<<"第三个字符串为:"<<list.String(2)<<'\n';     // 从0开始计数

    list.Print();

    system("pause");

}


运行结果:

solotony
2014-03-14 · TA获得超过599个赞
知道小有建树答主
回答量:700
采纳率:0%
帮助的人:573万
展开全部

内存用了乱七八糟,改成string和vector吧。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class LinearStr
{
int Point;
int Size;
vector<string> strp;

public:
explicit LinearStr() {
}

~LinearStr() {
}

int input(string const&);

string const& String(unsigned n) {
return strp[n];
}

unsigned Elem(void) const {
return strp.size();
}

unsigned Max(void) const {
return strp.capacity();
}

void Print(void);
};

int LinearStr::input(string const& p)
{    
strp.push_back(p);
return Elem();
}

void LinearStr::Print(void)
{    
for(int i=0;i<Elem();i++) {
cout<<strp[i]<<'\n';
}
}

int main()
{    
LinearStr list;

cout<<"请输入字符串,以-1结束"<<'\n';

string buf;
getline(cin, buf);

while (buf != "-1"){
list.input(buf);
getline(cin, buf);
}

cout<<"字符串个数为:"<<list.Elem()<<'\n';
cout<<"list长度为:"<<list.Max()<<'\n';
cout<<"第三个字符串为:"<<list.String(3)<<'\n';
list.Print();
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式