【发布时间】:2020-11-28 13:25:44
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INITIAL_CAPACITY 2
struct student {
char student[50];
int age;
};
struct student *arr;
void print(int i){
for (int j=i; j<=i;j++){
printf("%s\n%d\n",arr->student,arr->age);
}
}
void push(int *size, int *capacity){
printf("push\n");
int *tmp;
if(*size > *capacity){
arr = realloc(arr, 2 * sizeof(arr));;
*capacity = sizeof(arr) * 2;
}
}
void add_record(char *name, int age){
printf("add_record \n");
static int size = 0;
static int i=0;
static int capacity = INITIAL_CAPACITY;
arr = malloc(INITIAL_CAPACITY * sizeof(arr));
push(&size,&capacity);
strcpy(arr[i].student, name);
arr[i].age = age;
printf("%d\n", size);
printf("%d\n", capacity);
print (i);
i++;
}
int main()
{
add_record("uvhj",34);
add_record("sakenof",34);
add_record("sakekbdjb",34);
add_record("sakenohjm",34);
return 0;
}
在这段代码中,我尝试使用 calloc 和 malloc 将内存动态分配给 struct。 但我一直失败,无法获得所需的输出。 对不起,如果这段代码伤害了你的眼睛,我是编码新手
【问题讨论】:
-
期望什么输出,而你会得到什么?
-
arr 是指向
struct student的指针,将sizeof(arr) 更改为sizeof(struct student) -
arr = malloc(INITIAL_CAPACITY * sizeof(arr));每次调用add_record时都会创建一个新数组。也就是说,它永远不会保留除最后添加的数据之外的任何数据。更不用说它像筛子一样泄漏内存。 -
我希望它会打印数组的条目和大小,但它正在打印一些随机值
-
我应该怎么做才能解决这个问题@kaylum