标题
#ifndef INTVECTOR_H
#define INTVECTOR_H
using namespace std;
class IntVector{
private:
unsigned sz;
unsigned cap;
int *data;
public:
IntVector();
IntVector(unsigned size);
IntVector(unsigned size, int value);
unsigned size() const;
unsigned capacity() const;
bool empty() const;
const int & at (unsigned index) const;
};
#endif
主要
#include "IntVector.h"
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> iVector;
int *array;
IntVector::IntVector(){
sz = 0;
cap = 0;
*data = NULL;
vector<int> iVector (sz);
iVector.reserve(sz);
}
IntVector::IntVector(unsigned size){
sz = size;
iVector.resize(sz);
iVector.reserve(sz);
cap = iVector.capacity();
array = new int[sz];
array = 0;
}
IntVector::IntVector(unsigned size, int value){
sz = size;
iVector.reserve(sz);
cap = iVector.capacity();
array = new int[sz];
for(int i = 0; i < sz; i++){
array[i] = value;
}
}
unsigned IntVector::size() const{
return sz;
}
unsigned IntVector::capacity() const{
return cap;
}
bool IntVector::empty() const{
if(sz > 0){
return false;
}
else{
return true;
}
}
const int &IntVector::at(unsigned index) const{
if(index > sz){
exit(0);
}
else{
return array[index];
}
}
我遇到这个棘手的问题,试图将int *数据设置为NULL,因为我得到了分段错误。我应该使用什么方法在IntVector中将*数据分配给Null以避免分段错误?它看起来并不像我将任何内容重新分配给* Data,所以我有点困惑。
我的问题的第二部分是函数IntVector :: at。它应该返回存储在传入索引位置的元素中的值,但我不确定如何直接返回值,因为它是一个动态分配的数组,而我在Google上读到的内容非常令人困惑。我是否必须使用特殊参数来访问该值?谢谢。
答案 0 :(得分:2)
*data = NULL;
您没有将data
设置为NULL
(更喜欢nullptr
),而是将 *data
的值设置为{{ 1}}。 <{1}}是一个未初始化的指针,因此取消引用它是无效的。
你想要的是:
NULL
或者,更好
data
或者,最好使用初始化列表。
data = NULL;
答案 1 :(得分:0)
*data = NULL;
将内存位置的内容设置为NULL。但由于数据尚未指向任何地方,因此无效。