【发布时间】:2018-11-24 16:49:37
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define LENGHT 20
typedef struct {
unsigned id;
char name[LENGHT];
char genre[LENGHT];
char nazionality [LENGHT];
int year_carrier_started;
bool check;
}Artist;
void print(Artist *arr, int *i);
void addOne(Artist *arr, int *i);
int main(void) {
int index = 5;
Artist *array = malloc(sizeof(int)*index);
for (int i=0;i<index;i++)
{
printf("Insert a number:\n");
scanf("%d",&array[i].id);
}
do
{
addOne(array,&index);
print(array,&index);
}while(1);
system("pause");
free(array);
return EXIT_SUCCESS;
}
void addOne(Artist *arr, int *i)
{
realloc(arr,sizeof(Artist)*(*i)+1);
printf("Insert another one:\n");
scanf("%d",&arr[*i].id);
*i = *i +1;
print(arr,i);
}
void print(Artist *arr, int *i)
{
for (int j=0;j<*i;j++)
{
printf("Number: %d position %d\n",arr[j].id,j);
}
}
大家好,我从我的一段程序中得到了这个结构,我需要做的是每次用户想要添加一个新的艺术家时重新分配。在添加了大约 10/15 的用户后,它会无缘无故地崩溃(至少对我来说没有)。我究竟做错了什么? (Dat *i 是通过引用传递的,它计算已经有多少艺术家)。
【问题讨论】:
-
提示:为什么要在
sizeof(Artist)*(*i)+1中 +1? -
realloc可能会将您的数据移动到另一个位置,因此您不能相信arr仍然有效。这就是 realloc 还返回分配的内存位置的原因。 -
@chux 是的,我很抱歉,因为我修改了每个语句的 *i 所以,我这样做加上 1
-
有没有办法将我的代码与功能一起发布?不幸的是,它没有被识别为代码,所以我需要 Ctrl + k 它的每一行......
-
我编辑了一个 MCVE
标签: c