首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >动态内存分配

动态内存分配
EN

Stack Overflow用户
提问于 2009-02-27 08:15:55
回答 4查看 417关注 0票数 0

如何为结构数组动态分配内存...例如:

代码语言:javascript
运行
复制
class students
{
    struct stud
        {
           int r_no;
           char name[20];
         }*s; 
}

如何为*s动态分配内存...

EN

回答 4

Stack Overflow用户

发布于 2009-02-27 08:22:39

首先,这是,而不是的方式,例如,你可以使用stud的向量。使用您已有的代码,它将类似于:

代码语言:javascript
运行
复制
class students
{
public:
    struct stud ... *s;
    students() // ctor
    {
        s = new stud[100]; // say you have 100 students
        // from now on you can use s[0], s[1], etc. in the class
    }
};

但是,您应该使用某种STL向量或列表:

代码语言:javascript
运行
复制
class students
{
public:
    struct stud ... ;
    std::vector<stud> my_students;
    students() // ctor
    {
        stud aStudent = {0, "Student Name"};
        my_students.push_back(aStudent); // add a new student.
    }
};
票数 5
EN

Stack Overflow用户

发布于 2009-02-27 08:20:01

为什么在只有一个指针的类中对结构进行额外的包装?

无论如何,在C语言中,你会这样做:

代码语言:javascript
运行
复制
struct stud
{
  int r_no;
  char name[20];
} *s;

size_t num_students = 4711;

s = malloc(num_students * sizeof *s);

当然,谨慎的做法是遍历并确保所有这些独立的结构都已初始化。

如果您的意思是这是C++,那么您应该编写负责这一点的构造函数,并使用new[]来分配一个结构数组。

票数 2
EN

Stack Overflow用户

发布于 2009-02-27 10:18:04

在可能的情况下,应该使用标准组件。在这里,std::string和std::vector会对您有所帮助。

代码语言:javascript
运行
复制
struct Student
{
    int r_no;
    std::string name;
};
typedef std::vector<Student> StudentList;

使用这种方法,就没有必要去考虑如何动态分配内存了。一切都安排好了!

编辑:

我只是简单地定义了StudentList,因为对我来说,给它添加更多的功能与这个问题无关。显然,最后一行可以替换为真正的类定义:

代码语言:javascript
运行
复制
class StudentList
{
    public:
        // Add your own functionalities here
    private:
    std::vector<Student> m_students;
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/593946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档