在C中的struct中的元素上使用malloc

时间:2015-01-28 08:22:23

标签: c struct malloc

我有这个结构:

typedef struct
{
    char name[3];
    int month_num;
    int day_num;
    int day_size; // amount of days that are field in with tasks.
    char *task[40];
}

month; // each month contains a name, its num in the calendar and days.

我需要为它分配内存分配。 我能够为结构本身分配内存:

mon = (month*)malloc(12 * sizeof(month));

但我很难为char *任务[40]做同样的事情。

我尝试了很多可能性,但他们没有工作......

char temptask[40];
mon->task=malloc(strlen(temptask)+1);

3 个答案:

答案 0 :(得分:1)

for(i=0;i<40;i++)
{ 
  /* Allocating memory to each pointers and later you write to this location */
  mon->task[i] = malloc(size);/* If you have a initialized string then size = strlen(tempTask) + 1 */
}

你拥有的是指针数组,只需访问它们并分别为每个指针分配内存,如上所示。

答案 1 :(得分:0)

char *task[40];是一个包含40个指针的数组。您可能需要一个包含40个字符的单个数组,在这种情况下不需要单独对其进行malloc,或者只需一个指针,在这种情况下您可以malloc(40)。你不能在未初始化的C字符串上调用strlen(),这是未定义的行为(缓冲区溢出)。

答案 2 :(得分:0)

我想,你需要的是

char *task;

然后将内存分配为

mon[j].task=malloc(sizeof(temptask));

接下来,因为您已将内存分配给mon

 mon = malloc(12 * sizeof(month));

访问应该是

 mon[j].task  // j being the index, running from 0 to 11

否则,如果您确实有一个char *task[40];,即40 char *的数组,那么您必须为每个分配内存,一个接一个。

int p = strlen(temptask);
for(i=0;i<40;i++)
{
      mon[j].task[i] = malloc(p+1);
}