分段错误并返回存储在元素中的值?

时间:2014-02-19 21:39:19

标签: c++

标题

#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上读到的内容非常令人困惑。我是否必须使用特殊参数来访问该值?谢谢。

2 个答案:

答案 0 :(得分:2)

*data = NULL;

您没有将data设置为NULL(更喜欢nullptr),而是将 *data的值设置为{{ 1}}。 <{1}}是一个未初始化的指针,因此取消引用它是无效的。

你想要的是:

NULL

或者,更好

data

或者,最好使用初始化列表。

data = NULL;

答案 1 :(得分:0)

*data = NULL;

将内存位置的内容设置为NULL。但由于数据尚未指向任何地方,因此无效。