如何将数据添加到指针数组?

时间:2019-01-12 21:19:15

标签: c++ pointers memory

我创建了一个指针数组。 我想知道如何prp =可操作地将数据添加到指针数组中。 我尝试了下面的代码,很遗憾,这给了我一个内存错误,我不知道为什么。

class dataClass {
    int data;
public:

    void setdata(int d) {data = d;}
    int getdata() const {return data;}
};

int main() {
    dataClass** ptr = new dataClass*s[5];

    int num = 9;
    ptr[0] -> setdata(num);

    return 0;
}

3 个答案:

答案 0 :(得分:0)

您只需为指针分配内存(而不为对象分配内存),因此ptr [0]指向未指定的地址,并且会出现段错误。 您需要添加以下内容:

for(int i = 0; i < 5; i++) {
    ptr[i] = new dataClass;
}

答案 1 :(得分:0)

使用 pointer-to-pointer-to-type 时,必须为所需数量的指针分配存储空间,然后为每个类分配存储空间,然后再为每个类分配存储空间分配给每个指针。

例如,在尝试提问时使用5指针,您首先需要分配指针,例如

#define NPTRS 5
...
    dataClass** ptrs = new dataClass *[NPTRS];

现在您已为5指针分配了存储空间,以键入dataClass,并将初始指针的地址分配给ptrs(为清楚起见,我添加了复数形式)

现在已分配了指针的存储,但是分配的每个指针尚未指向dataClass的有效存储,它们只是指针。在使用指针引用该类的实例之前,必须为每个类实例分配存储,然后将新的内存块的地址分配给每个指针,例如

     for (int i = 0; i < NPTRS; i++) {
        ptrs[i] = new dataClass;
        ptrs[i]->setdata (i+1);
    }

(上面为每个类实例分配了存储空间,将结果分配给ptrs[i],然后将data的值设置为i+1

将其完全放在一起,您可以执行以下操作:

#include <iostream>
#include <cstdlib>

#define NPTRS 5

class dataClass {
    int data;
public:

    void setdata(int d) {data = d;}
    int getdata() const {return data;}
};

int main() {

    dataClass** ptrs = new dataClass *[NPTRS];

    for (int i = 0; i < NPTRS; i++) {
        ptrs[i] = new dataClass;
        ptrs[i]->setdata (i+1);
    }

    for (int i = 0; i < NPTRS; i++)
        std::cout << "ptrs[" << i <<"]->getdata() : " 
                << ptrs[i]->getdata() << '\n';

    return 0;
}

注意:不要忘记您负责跟踪分配的内容,并在不再需要分配时调用delete释放每个分配)

使用/输出示例

$ ./bin/dblptr2class
ptrs[0]->getdata() : 1
ptrs[1]->getdata() : 2
ptrs[2]->getdata() : 3
ptrs[3]->getdata() : 4
ptrs[4]->getdata() : 5

正如其他人所提到的那样,像vector这样的C ++容器出错的可能性较小,并使您的工作容易得多。不过,您应该知道如何处理new/delete以及容器的使用。

仔细检查一下,如果还有其他问题,请告诉我。

答案 2 :(得分:0)

您可以先创建一个对象数组 (构造函数将被自动调用)。

之后,创建一个指向您的指针的指针:

#include <stdio.h>

class dataClass {
    int data;
public:

dataClass(){ 
    printf(" new instance \n");
}

void setdata(int d) {
    data = d;
    printf(" setdata \n");
}

int getdata() const {return data;}
};

int main() {
    dataClass*  ptr = new dataClass[5];
    dataClass** pptr = &ptr;  

int num = 9;
pptr[0]->setdata(num);

return 0;
}

结果:

  

新实例
  新实例
  新实例
  新实例
  新实例
  setdata