1

对于本周我的 CS 课上的作业,我们必须修改我们当前的程序,以便为所有数组动态分配内存。我们必须确保没有内存浪费在空元素上。为此,我们必须将字符数组分配给临时数组,检查临时数组的大小,然后分配该大小的数组。

无论如何,我不知道如何使用结构来做到这一点。我知道如何动态分配内存,例如

int* pointer = new int(5);

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

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

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

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

4

4 回答 4

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

编译器不需要知道你分配的大小,因为这个结构将存储的只是一个指向分配内存的指针。

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

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

ps 只是检查一下,您是否知道下面的代码分配了 1 个元素并将其设置为 5,而不是分配 5 个元素?请参阅维基百科了解这两种用途之间的区别。

int* pointer = new int(5);
于 2013-02-22T05:12:31.230 回答
3
struct card
   {
    char *rank;
    char *suit;
    char color;
    bool dealt;
    char *location;
   };

只需在结构中获取指针并为它们动态分配内存,不要忘记在使用后释放它们..

于 2013-02-22T05:13:33.480 回答
1

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

于 2013-02-22T05:17:21.090 回答
-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);

对于更动态的结构分配,通过调用结构本身作为指针来使用链表: 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;

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

于 2013-02-22T06:22:08.237 回答