它不允许我将变量存储在结构中的数组中

use*_*471 2 c arrays struct pointers

嘿家伙所以我有这个程序,其基本功能是创建一个集并要求用户添加一个输入.然后程序将检查输入,以便如果该输入已经在程序中,则它要求用户输入单个输入.

这是我一直在使用的结构:

struct memory
{
    int num;
    char element[MAXNUMB];
};
typedef struct memory *Item;
Run Code Online (Sandbox Code Playgroud)

这是Create函数:

Item Create()
{
   Item set;
   set=(Item*)malloc(sizeof(Item));
   set->num=0;
   return set;
}
Run Code Online (Sandbox Code Playgroud)

这是添加功能:

void Add(Item S,int x)//add an element to set S
{
    Item set;
    int i,flags;
    flags=0;
    if(S==NULL)//gives error if set doesn't exist
    {
        printf("Memory Allocation failed. Goodbye!");
        exit(EXIT_FAILURE);
    }
    printf("Please enter an input: ");//takes input from user
    scanf("%d",&x);
    for(i=0;i<n;i++)//checking for similar inputs
    {
        if(set->element[i]!=x)
        {
            flags=1;
        }
        else
        {
            if(flags!=1)
                flags=0;
        }
    }
    while(flags==0)
    {
        printf("Error! Integer already exists! Please enter a different input: ");
        scanf("%d",&x);
        for(i=0;i<n;i++)
        {
            if(set->element[i]!=x)
            {
                flags=1;
            }
            else
            {
                if(flags!=1)
                    flags=0;
            }
        }
    }
    set->element[set->num]=x;//it is crashing on this line
    printf("x");
    n++;
    set=realloc(set,n*sizeof(Item));
    set->num++;
}
Run Code Online (Sandbox Code Playgroud)

我的程序崩溃了

set->element[set->num]=x;
Run Code Online (Sandbox Code Playgroud)

如果你能就如何解决这个问题给我一些建议,我将不胜感激.谢谢

Ed *_*eal 5

这条线

set=(Item*)malloc(sizeof(Item));
Run Code Online (Sandbox Code Playgroud)

应该读

set=malloc(sizeof(struct memory));
Run Code Online (Sandbox Code Playgroud)

因为你想分配更多的内存而不仅仅是一个指针


Edw*_*nts 5

除了上一个答案(你还需要以realloc同样的方式改变你的想法),它看起来像你的Add功能,

a)set未初始化

b)n似乎没有被宣布

c)x是一个按值传递的参数,您将覆盖调用中的值scanf