gpt4 book ai didi

c - 如何正确地为 C 中的结构数组分配内存?

转载 作者:行者123 更新时间:2023-12-04 00:30:22 25 4
gpt4 key购买 nike

这是我第一次使用结构体,因为我对 C 还是比较陌生。当我尝试输入 3 个结构体的值时,程序崩溃了,但它对 1 和 2 工作正常。我想我实际上可能没有分配足够的内存。这是为结构数组分配内存的正确方法吗?

#include <stdio.h>
#include <stdlib.h>

#define MIN_SIZE 0
#define MAX_SIZE 100
#define MAX_MONTH_STR 9

//Define a struct data type
typedef struct
{
char* month;
int day;
int year;
}date;

//Method to allocate memory for a list of date structures
date* allocateStruct(int size)
{
//Declaration of variables
date *array;
int i;

//Allocate memory for rows (to store 'size' many pointers to 'date' struct data type)
array = malloc(size*sizeof(date*));

//For-loop to allocate memory for columns (to store 'size' many integers, and initialize them to zero)
for (i=0; i<size; i++)
{
array[i].month = calloc(MAX_MONTH_STR,sizeof(char));
array[i].day = calloc(1,sizeof(int));
array[i].year = calloc(1,sizeof(int));
}

return array;
}

//Method to free memory allocated
//TO DO. . .

int main()
{
//Declaration of variables
int n;
date* date_list;
int i, j, k; //used in loops

//Read input
do
{
//printf("Enter number of dates you want to enter (between 1 and 10000):\n");
scanf("%d", &n);
}while(n<MIN_SIZE || n>MAX_SIZE);

//ALLOCATE MEMORY
date_list = allocateStruct(n);


//For-loop to store values in 'date_list'
for (i=0; i<n; i++)
{
//printf("Enter the date (month day year) in the following format: text number number");
scanf("%s", date_list[i].month);
scanf("%d", &date_list[i].day);
scanf("%d", &date_list[i].year); //need & ?
}

//--------> crashes here if 3 dates are input, ok for 1 and 2

//Test print
for (i=0; i<n; i++)
{
//printf("Enter the date (month day year) in the following format: text number number");
printf("%s ", date_list[i].month);
printf("%d ", date_list[i].day);
printf("%d\n", date_list[i].year); //need & ?
}

return 0;
}

最佳答案

您正在尝试使用指向日期结构的指针大小而不是日期结构的实际大小分配数组。

date* 更改为 date :
array = malloc(size*sizeof(date));
此外,您不需要分配 day 和 year 变量,因为 malloc 会为您分配它们。

for (i=0; i<size; i++)
{
array[i].month = calloc(MAX_MONTH_STR,sizeof(char));
array[i].day = 0;
array[i].year = 0;
}

关于c - 如何正确地为 C 中的结构数组分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28931034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com