这算不算是 编译器的bug

lilistudy 2005-04-10 04:27:36
下面的问题好奇怪 大家看看是为什么
#ifndef MyLinearList_
#define MyLinearList_

#include <iostream.h>
#include <stdlib.h>
#include "xcept.h"

const int NUM = 3 + 2;
template<class T>
class MyLinearList
{
public:
MyLinearList(int MaxSizeValue = 100);
~MyLinearList();
MyLinearList<T>& Find(int i, int k, T &x);
MyLinearList<T>& Insert(int i, int k,const T &x);
MyLinearList<T>& Delete(int i, int k, T &x);
private:
int First[NUM];
int Last[NUM];
T *element;
int MaxSize;

};

template<class T>
MyLinearList<T>::MyLinearList(int MaxSizeValue )
{
MaxSize = MaxSizeValue;
/// element = (T *)malloc(sizeof(T) * MaxSize);
/*如果这条语句放在这里 执行完成后element 地址0x00431cd0,但是在调用Insert()时
element 地址都会变为 0x0000084;导致内存访问错误.*/

First[0] = Last[0] = -1;
First[4] = Last[4] = MaxSize - 1;
///为每个表分配各自的空间
int eachsize = MaxSize / 3;
for(int i = 1; i <= NUM; i ++)

{
First[i] = Last[i] = (i - 1) * eachsize;


}

element = (T *)malloc(sizeof(T) * MaxSize); ////放在这里 则没有问题.

}
template<class T>
MyLinearList<T>::~MyLinearList()
{
delete [] element;
}

template<class T>
MyLinearList<T>& MyLinearList<T>::Insert(int i, int k, const T &x)
{
// if(i < 0 || i > NUM)
// OutOfBounds();

if(0 < k && k <= (Last[i] - First[i]) + 1)
{
for(int j = Last[i] - 1; j > First[i] + k; j --)
{
element[j] = element[j - 1] ;
}
element[First[i] + k - 1] = x;
Last[i] ++;
}
// OutOfBounds();


return *this;
}
#endif


/////////////main() 函数
#include <iostream.h>
#include "MyLinearList.h"
int main()
{
MyLinearList<int> L(100);
L.Insert(1, 1, 2); /////L.element[0] = x;
L.Insert(1, 2, 3);
return 0;
}
...全文
132 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilistudy 2005-04-17
  • 打赏
  • 举报
回复
谢谢
我 结了贴
不过我分太少
每人只有10
jingyueid 2005-04-10
  • 打赏
  • 举报
回复
同上
zengwujun 2005-04-10
  • 打赏
  • 举报
回复
for(int i = 1; i <= NUM; i ++)<--你这里错了

{
First[i] = Last[i] = (i - 1) * eachsize;


}
在这上面放你的语句,申请的内存跟Last[4]是连着的,你对last[5]进行操作,
就是对element进行了操作,地址自然改了
把i<=NUM改为i<NUM就OK了

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧