在 C 中的结构中的元素上使用 malloc
Using malloc on a elemnt in struct in C
我有这个结构:
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 *task[40] 做同样的事情。
我尝试了很多可能性,但没有一个可行...
char temptask[40];
mon->task=malloc(strlen(temptask)+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 */
}
您拥有的是指针数组,只需访问它们并分别为每个指针分配内存,如上所示。
char *task[40];
是一个包含 40 个指针的数组。你可能想要一个 40 个字符的数组,在这种情况下不需要单独 malloc,或者一个指针,在这种情况下你可以 malloc(40)
。您不能在未初始化的 C 字符串上调用 strlen()
,这是未定义的行为(缓冲区溢出)。
我想,你需要的是
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);
}
我有这个结构:
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 *task[40] 做同样的事情。
我尝试了很多可能性,但没有一个可行...
char temptask[40];
mon->task=malloc(strlen(temptask)+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 */
}
您拥有的是指针数组,只需访问它们并分别为每个指针分配内存,如上所示。
char *task[40];
是一个包含 40 个指针的数组。你可能想要一个 40 个字符的数组,在这种情况下不需要单独 malloc,或者一个指针,在这种情况下你可以 malloc(40)
。您不能在未初始化的 C 字符串上调用 strlen()
,这是未定义的行为(缓冲区溢出)。
我想,你需要的是
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);
}