如何在结构中动态分配内存?

时间:2013-02-22 05:09:39

标签: c++ arrays dynamic struct allocation

对于本周在CS类中的赋值,我们必须修改当前程序,为所有数组动态分配内存。我们必须确保没有内存浪费在空元素上。我们必须通过赋值字符数组到临时数组,检查temp的大小,然后分配那个大小的数组来做到这一点。

无论如何,我不知道怎么用结构来做。我知道如何动态分配内存,例如

int* pointer = new int(5);

但是我如何为结构成员做到这一点?看起来除非您预先定义大小,否则当您声明该类型的结构时,计算机将不知道要分配多少空间。

现在,我的结构定义是这样的:

struct card
   {
   char rank[10];
   char suit[10];
   char color;
   bool dealt;
   char location[12];
   };

如何在不指定大小的情况下更改要动态声明的所有数组?

4 个答案:

答案 0 :(得分:4)

struct card
   {
    char *rank;
    char *suit;
    char color;
    bool dealt;
    char *location;
   };

只需在结构内部指针并动态分配内存,不要忘记在使用后释放它们。

答案 1 :(得分:3)

struct card
{
   char* rank;
   char* suit;
   char color;
   bool dealt;
   char* location;
};

编译器不需要知道你要分配的大小,因为所有这个struct都会存储指向已分配内存的指针。

如果每个分配1个元素或者每个元素分配1000个元素,则指针的大小和结构将是相同的。

card c;
c.location = new char[10];

P.S。只是检查,你知道下面的代码分配了1个元素并将其设置为5,而不是分配5个元素吗?请参阅wikipedia了解两种用途之间的差异。

int* pointer = new int(5);

答案 2 :(得分:1)

使用char *排名?当你使用它时,card-> rank = malloc(sizeof(char)* size)?

答案 3 :(得分:-1)

在任何情况下,您都不需要更改结构变量,只需使用typedef更改调用它的方式:

typdef struct _CARD
   {
   char rank[10];
   char suit[10];
   char color;
   bool dealt;
   char location[12];
   } CARD;

初始化CARD的使用数组:

CARD* card;
#define ARRSIZE 12

card = (CARD*)malloc(sizeof(CARD)*ARRSIZE);

对于更多动态结构分配,通过将struct本身作为指针来使用链表: typdef struct _CARD

 typdef struct _CARD {
   char rank[10];
   char suit[10];
   char color;
   bool dealt;
   char location[12];
   struct _CARD  *_next;
   } CARD;

并根据需要初始化每个结构并使用_next指针绑定它们:

    CARD *card,*tmp,*final,*first,*etc;
    card = (CARD*)malloc(sizeof(CARD));
    tmp= (CARD*)malloc(sizeof(CARD));
    card->_next = tmp;
    final = (CARD*)malloc(sizeof(CARD));
    tmp->_next = final;
    final->_next = NULL;

等等,您需要具有其他功能来管理动态创建的结构及其绑定。