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

编写顺序表时出现的异常

2013-03-17 
编写顺序表时出现的错误没有错误但是运行不了,在产生随机数那个地方无法调试,求大神指导啊#includeiostre

编写顺序表时出现的错误
没有错误但是运行不了,在产生随机数那个地方无法调试,求大神指导啊
编写顺序表时出现的异常
#include<iostream>
#include<stdlib.h>
using namespace std;

const int DefaultListSize=100;

class Alist
{
int length,maxsize,*p;
public:
void append(int n);               //..........添加
void insert(int m,int n);         //..........插入
void remove(int n);               //...........删除
void output();                   //..........输出

Alist(int size=DefaultListSize)
{
maxsize = size;
        length= 0;
}
~Alist() {}
};

void Alist::append (int n)
{
*p=n;
p++;length++;
}

void Alist::insert (int m,int n)      //............插入
{
int i;
if(length>=maxsize) cout<<false;
    for(i=length-1;i>m-1;i--)
*(p+i+1)=*(p+i);
*(p+m)=n;
length++;
}

void Alist::remove (int n)            //.............删除
{
    if(n>=length) cout<<false;
    int i;
for(i=n-1;i<length;i++)
*(p+n)=*(p+n+1);
length--;
}

void Alist::output ()                //...........输入
{
int m;
for(m=0;m<length;m++)
cout<<*(p+m)<<"    "<<endl;
}

int main()
{
Alist obj;
int elem;
    int i;
   
    for(i=0;i<10;i++)
{
        elem=rand()%100;
        obj.append (elem);
}

obj.output ();
obj.insert (3,2);
obj.output ();
obj.remove (5);
obj.output ();

return 0;
}
[解决办法]
请问给p分配空间了吗?



Program received signal SIGSEGV, Segmentation fault.
0x0000000000400a52 in Alist::append (this=0x7fffffffdf90, n=83) at ssl.cpp:26
26*p=n;
(gdb) list 26
21~Alist() {}
22};
23
24void Alist::append (int n)
25{
26*p=n;
27p++;length++;
28}
29
30void Alist::insert (int m,int n)      //............插入
(gdb) p this->p
$1 = (int *) 0x0

[解决办法]
只能断点调试了,看看错在哪
[解决办法]
p没有初始化啊。。。。
[解决办法]
p的初始化要用new从堆上分配,不能指向函数内部的数组。这个数组在构造函数结束时就失效了。

类成员初始化要用初始化列表,一般不要在构造内部赋值。

[解决办法]
你这个太坑爹了,

仔细一看, append()函数,都为分配内存空间,就赋值,


还随意移动p指针,直接移到野指针位置了。

必须出错啊~~~

热点排行