Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用结构创建数组 我最近开始学习C++来改变我的职业。_C++_Arrays_Pointers_Struct - Fatal编程技术网

使用结构创建数组 我最近开始学习C++来改变我的职业。

使用结构创建数组 我最近开始学习C++来改变我的职业。,c++,arrays,pointers,struct,C++,Arrays,Pointers,Struct,我了解一些基本的指针逻辑,我想用这个结构创建一个数组 基本上,这里是我到目前为止编写的代码: struct arr{ private: int size; int *elements; public: void createarray(int start, int end); void printa(); }; void arr::createarray(int start, int end){ size=end-start; for(int i=0;i<=

我了解一些基本的指针逻辑,我想用这个结构创建一个数组

基本上,这里是我到目前为止编写的代码:

struct arr{
private:
    int size;
    int *elements;
public:
    void createarray(int start, int end);
    void printa();
};
void arr::createarray(int start, int end){
size=end-start;
for(int i=0;i<=size;i++){
    *(elements+i)=start+i;
}
}

void arr::printa(){
    for(int i=0;i<=size;i++){
        cout << *(elements+i) << endl;
    }
}
struct-arr{
私人:
整数大小;
int*元素;
公众:
void createarray(int开始,int结束);
void printa();
};
void arr::createarray(int开始,int结束){
大小=结束-开始;
对于(int i=0;i这是您的代码:

void arr::createarray(int start, int end){
    size=end-start;
    for(int i=0;i<=size;i++){
        *(elements+i)=start+i;
}
当你
new
某个东西时,你必须在完成后
删除它。否则你会泄漏内存。
执行此操作的合理位置是在析构函数中(与构造函数相同,前缀为
~
,但在结构实例死亡时调用)


但是您不必担心这个问题。STL有一个容器,可以满足您的需要。
std::vector

您没有为动态数组分配任何内存。实际上,它应该是这样的:

struct arr {
private:
    int size;
    int *elems;

public:
    // createarray should be a constructor
    arr(int start, int end) {
        size = end - start + 1;
        elems = new int[size];
        for (int i = 0; i < size; i++)
            elems[i] = start + i;
    }

    // clean up memory
    ~arr() {
        // make sure to include the '[]'
        delete[] elems;
    }

    // print array
    void printa() {
        for (int i = 0; i < size; i++)
            std::cout << elems[i] << "\n";
    }
};
struct-arr{
私人:
整数大小;
int*元素;
公众:
//createarray应该是一个构造函数
arr(整数起始,整数结束){
大小=结束-开始+1;
元素=新的整数[大小];
对于(int i=0;istd::cout你会遇到什么样的错误?虽然学习指针以及如何使用指针创建动态“数组”很好,但一旦你学到了这个教训,你就可以扔掉它,因为每当你想到“动态数组”当C++编程时,你的下一个应该是。在这个过程中没有任何动态数组。
迟早会出现在那里,正如将for循环的条件限制固定为严格小于
大小一样。正如现在所写的,这是一个未定义行为的配方,假设实际创建了
arr
的实例(也没有发布的代码会这样做)。最后,“正在使用未初始化的指针执行算术。。。"做任何事情,无论是指针算术,甚至是简单的计算,使用不确定的变量内容构成了最基本形式的未定义行为。因此我发现,通过声明*p和取消引用是不允许的。我最初认为指针声明和取消引用将自动为指针分配一些随机addrESS…我想这是一个愚蠢的问题。不要尝试编写你自己的类直到掌握基本的基础。C++习语是写构造函数和析构函数。它把初始化与对象定义联系起来。它是C++的主要优点之一。非常感谢!我不知道这是可能的。所以你需要分配内存!!现在我明白了。数组和指针并不像很多人想象的那样可互换。在某些条件下,一个会衰变为另一个,但这就是它的终点。
struct arr {
private:
    int size;
    int *elems;

public:
    // createarray should be a constructor
    arr(int start, int end) {
        size = end - start + 1;
        elems = new int[size];
        for (int i = 0; i < size; i++)
            elems[i] = start + i;
    }

    // clean up memory
    ~arr() {
        // make sure to include the '[]'
        delete[] elems;
    }

    // print array
    void printa() {
        for (int i = 0; i < size; i++)
            std::cout << elems[i] << "\n";
    }
};