【发布时间】:2021-08-21 06:59:50
【问题描述】:
我尝试解决许多关于 munmap_chunk(): invalid pointer 错误的类似问题,但我不知道该怎么做。我也尝试添加free 命令。
我是 C++ 新手,通常使用 Python 和 Java,所以指针和内存管理的整个概念对我来说是新的。如果有人能解释我做错了什么,那就太好了。
这是我的 Array 类的通用 T 代码:
#include <iostream>
using namespace std;
template <typename T>
class Array {
private:
T *arr;
int len = 0; //length the user thinks the array is
int capacity = 0; //actual array capacity
public:
Array(int cap=16){
if (cap<0){
throw invalid_argument("Illegal Capacity: "+cap);
}
capacity = cap;
arr = new T[cap];
for(int i=0; i<capacity; i++){
arr[i] = 0;
}
}
~Array(){ delete [] arr; }
T& operator[](int index){ return arr[index]; }
int size(){ return len; }
bool isEmpty(){ return size() == 0; }
T get(int index){ return arr[index]; }
void set(int index, T elem){ arr[index] = elem; }
void clear(){
for(int i = 0; i < capacity; i++)
arr[i] = 0;
len = 0;
}
void add(T elem){
if (len+1 > capacity){
if (capacity == 0) capacity = 1;
else capacity*=2;
T *newarr = new T[capacity];
for (int i = 0; i < len; i++){
newarr[i] = arr[i];
}
delete [] arr;
arr = newarr;
}
arr[len++]=elem;
}
T removeAt(int rmIndex){
if (rmIndex >= len || rmIndex < 0) throw out_of_range(rmIndex +" out of range for len " + len);
T data = arr[rmIndex];
T *newarr = new T[len-1];
for (int i=0, j=0; i < len; i++, j++){
if (i==rmIndex){
j--;
}
else{
newarr[j]=arr[i];
}
}
delete [] arr;
arr = newarr;
capacity = --len;
return data;
}
bool remove(T t){
for (int i=0; i<len; i++){
if (arr[i]==t){
removeAt(i);
return true;
}
}
return false;
}
int indexOf(T t){
for (int i=0; i<len; i++){
if (arr[i]==t){
return i;
}
}
return -1;
}
bool contains(T t){ return indexOf(t) != -1; }
};
int main()
{
cout << "hello" <<endl;
Array<float>z(122);
cout << z.size() << endl;
for (int i = 0; i < z.size(); i++){
z.set(i,(float)i);
}
for (int i = 0; i < z.size(); i++){
cout << z.get(i);
}
cout << z.size() << endl;
return 0;
}
输出只有hello world,没有别的。
我一直在向this video 学习,我正在尝试将那里提供的 Java 代码转换为 C++ 以尝试学习该语言,并且我一直在广泛使用 StackOverflow。但是对于这个问题,我无法找到问题的根源,所以请帮帮我。
尝试将其改编成 C++ 的 Java 代码在 here 可用。
【问题讨论】:
-
注意:我正在使用命名空间
std并包含iostream -
如何获取
munmap_chunk(): invalid pointer?模板数组从未在代码中使用。 -
delete[]并且delete和free都不能跟随new[]。 -
你应该发帖minimal reproducible example。你应该学过stackoverflow用户指南吧?
-
告诉我,
cap
标签: c++ pointers memory-management