c++ - 访问 C 中结构数组中的数组(结构成员)

标签 c++

我在访问结构数组中的数组(结构成员)时遇到问题。 代码示例:

struct SV
{
    int station;
    double* tab;
    SV()
    {
     double* tab= new double[3];
    }

};

int main()
{
    SV* SUV = new SV[10];

    SUV[0].station = 10; // works
    SUV[0].tab[0] = 10; //  how it should be done?

    return 0;
}

我怎样才能访问这个数组?在 C 中有可能吗? 提前致谢!

最佳答案

在您的struct SV中:

struct SV
{
    int station;
    double* tab;
    SV()
    {
     double* tab= new double[3];
    }

};

在构造器中,你做:

double* tab= new double[3];

但是,您需要做的是:

tab= new double[3];

前一个不是您想要的,因为它创建了一个名为 tabnew 数组,该数组位于构造函数的本地,并且不会初始化您的类中的数组。试图索引这个数组将调用未定义的行为,因为 tab 没有指向任何东西。这也会造成内存泄漏,因为本地数组不是deleted。

另一方面,您也可以在构造函数中执行此操作:

SV() : tab(new double[3]) {};

这将在构造函数中初始化 tab,而不是分配给它。

作为旁注,我建议您查看 std::vector 大大简化您的任务。

关于c++ - 访问 C 中结构数组中的数组(结构成员),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45510899/

相关文章:

java - 在 C++ 和 Java 之间传播 Oracle 事务

c++ - 使用 "if"或 "switch"设置变量类型

c++ - 为什么需要一个空的 shared_ptr 以及如何使用它?

c++ - 使用 C/C++ 制作球体上的点、线和多边形

c++ - OpenGL 用鼠标移动画圆

c++ - Visual Studio中D8049错误的原因是什么?

c++ - 有没有优化两个BigNums的乘法的好方法?

c++ - 在C++中将数字转换为具有指定长度的字符串

c++ - 不同的Ubuntu版本二进制执行差异

c++ - 链接列表 (C/C++)。同时创建列表结构和节点结构有哪些优点/缺点?