谁能帮我做我自己的矢量类
Can anybody help me to do my own Vector class?
我只对push_back
函数有问题,编译器说:
CRT 检测到应用程序在堆缓冲区结束后写入内存
我想做一个push_back function
,在向量的末尾添加一个新元素。
#pragma once
#include <cstdio>
#include <cmath>
#include <iostream>
#include <cstdlib>
class tomb {
private:
double *adat;
int szam;
public:
tomb(){
adat = NULL;
szam = 0;
}
int meret()const {
return szam;
}
~tomb() {
delete[] adat;
}
double & operator[](int n) {
return adat[n];
}
const double & operator[](int n)const {
return adat[n];
}
void push_back(const double &a) {
double *tmp;
int pos = szam + 1;
tmp = new double[szam+1];
for (int i = 0; i < szam; i++)
{
tmp[i] = adat[i];
}
tmp[pos] = a;
delete[] adat;
adat = tmp;
++szam;
}
void Kiir()const {
for (int i = 0; i < szam; i++)
{
std::cout << adat[i] << "n";
}
}
};
pos
应该是szam
而不是szam+1
。您愿意在最后一个位置插入,在从 0 开始的索引中,该位置n-1
.
问题出在这一行:
tmp[pos] = a;
由于pos
初始化为 szam + 1
,这相当于:
tmp[szam + 1] = a;
这是超出数组限制的一个。
解决方案是完全摆脱pos
,只需执行以下操作:
tmp[szam] = a;
顺便说一句,您的类正在使用默认的复制构造函数和赋值运算符,这些运算符将无法正常工作。你真的应该为此做点什么。
相关文章:
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 将矩阵乘以我自己的输入的向量
- 如何正确包含我自己的标头?
- 如何使用我构建的库,而不会从源代码出错,但不为我自己的项目编译?
- 为什么__builtin_popcount比我自己的比特计数功能慢?
- 在C++中,我可以在定义自己的复制构造函数后跳过定义赋值运算符吗?
- 在wxWidgets的事件中包含我自己的数据的最佳方法是什么?
- 如何在我自己的staticLib中使用staticLib
- 在我自己的堆栈中实现top的问题
- 尝试检查输入的文本与我自己的自定义答案
- 我应该在服务模板中的什么位置添加自己的代码?
- 如何在我自己的类中重载"+"和"<<"运算符
- 我正在尝试在视觉工作室上创建自己的库/源函数
- C++:我自己类的动态数组
- 如何在 C++ 中使用我自己的类中的库?
- 如何链接我自己的 .so 文件而不是操作系统捆绑包 .so 文件?
- 如何构建默认使用我自己的构建libc ++的clang?
- 访问另一个类(系统)的非静态字段,就好像它是我自己的字段一样 - 优雅地
- 分发我自己的程序的几个问题
- 如何自己为我自己的shared_ptr实现实现别名构造函数