指针内存错误
Memory error with pointer
我试图在自己的类向量中放置指针的值,但收到了内存错误。有人能帮我吗?
class myVector
{
int * vector;
int size;
public:
myVector()
{
size = 0;
vector = nullptr;
}
void pushBack(int data)
{
if (size == 0)
{
*vector = data;
size++;
}
else
{
int * tmp = new int[size + 1];
for (int i = 0; i <= size; i++)
tmp[i] = vector[i];
tmp[size + 1] = data;
vector = tmp;
delete[] tmp;
}
}
在我看来,代码中有很多问题。但是,我将只讨论你提出的问题。正如其他人所指出的,您已经创建了一个指针vector
并将其初始化为nullptr
。然后您尝试将数据存储在nullptr
中。这应该可以解决您面临的内存问题。
MyVector {
...
MyVector() : size(0), vector(new int[1]){ }
...
}
使用pushBack时,您试图将数据分配给指针,但在构造函数中指针设置为nullptr。
将数据分配给nullptr不是一个好主意。
vector = new int[1];
*vector = data;
对你来说应该有效。另一个好主意是在构造函数中初始化向量。
此外:
delete[] tmp;
是危险的,删除可能会以另一种方式添加到析构函数中。
为了有效地设计这样一个类,您需要考虑很多事情,比如在STL向量中定义容量。但是,快速实现看起来如下。您可以在这里试用代码。
#include <iostream>
using namespace std;
class myVector
{
int* vector_;
int size_;
public:
myVector() : size_(0), vector_(nullptr)
{}
~myVector() {
delete[] vector_;
}
int size() const {
return size_;
}
int operator[](int i) const {
return vector_[i];
}
void pushBack(int data)
{
int* tmp = new int[size_ + 1];
for (int i = 0; i < size_; i++)
tmp[i] = vector_[i];
tmp[size_] = data;
delete vector_;
vector_ = tmp;
++size_;
}
};
int main() {
myVector vec;
vec.pushBack(10);
vec.pushBack(2);
vec.pushBack(7);
for(int i = 0; i < vec.size(); ++i)
cout << vec[i] << endl;
return 0;
}
请注意,成员vector_已在析构函数中删除。在pushBack中将内存分配给tmp并将其移除会留下一个悬空指针。
我不知道这是否有帮助,但参数化构造函数中的其他部分有错误。当您创建大小为"size_+1"的新临时时,该临时的索引范围从0到"size_",因此循环本身超出了"向量的范围,然后分配给temp[size_+1]可能会导致某种内存错误。"user2229960"发布的Answer修复了此错误,方法是运行从0到"size_-1"的循环,然后将新值分配给temp[size_]。
相关文章:
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 内存错误低于在C++年实现埃拉托色尼筛分时的预期
- 共享内存:MapViewOfFile 返回错误 5
- 将 vector<vector<int>> 传递到函数中会产生内存错误
- 释放动态内存时C++错误
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 复制内存给出分段错误
- C++程序错误:malloc():内存损坏
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 为什么删除分配的阵列会导致内存错误?
- 需要找到3个小错误-内存错误
- 错误:内存位置的 std::length_error
- 修复了瓦尔格林德错误内存泄漏的错误
- 错误:“内存集”未在此范围内声明
- OpenCV 2.4.5运行时错误内存
- OpenCV错误:内存不足
- STL映射,设置错误:内存超出分配块的末尾
- GLUT:致命错误:内存不足
- MPI错误:内存不足-有哪些解决方案选项