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)
如果你能就如何解决这个问题给我一些建议,我将不胜感激.谢谢
这条线
set=(Item*)malloc(sizeof(Item));
Run Code Online (Sandbox Code Playgroud)
应该读
set=malloc(sizeof(struct memory));
Run Code Online (Sandbox Code Playgroud)
因为你想分配更多的内存而不仅仅是一个指针
除了上一个答案(你还需要以realloc同样的方式改变你的想法),它看起来像你的Add功能,
a)set未初始化
b)n似乎没有被宣布
c)x是一个按值传递的参数,您将覆盖调用中的值scanf