这是我一直在使用的结构:
struct memory
{
int num;
char element[MAXNUMB];
};
typedef struct memory *Item;
这是创建功能:
Item Create()
{
Item set;
set=(Item*)malloc(sizeof(Item));
set->num=0;
return set;
}
这是添加功能:
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++;
}
我的程序正在崩溃
set->element[set->num]=x;
如果你能就如何解决这个问题给我一些建议,我将不胜感激。感谢
答案 0 :(得分:5)
这一行
set=(Item*)malloc(sizeof(Item));
应该阅读
set=malloc(sizeof(struct memory));
因为你想分配更多的内存而不仅仅是一个指针
答案 1 :(得分:5)
除了上一个答案(您还需要以同样的方式更改realloc
),它看起来就像在Add
函数中,
a)set
未初始化
b)似乎没有声明n
c)x
是一个按值传递的参数,您将覆盖调用scanf
答案 2 :(得分:0)
您的分配错误:您typedef
项目是指针,然后您为该指针分配内存,并错误地将其用于数据本身。尝试替换
Item set;
set=(Item*)malloc(sizeof(Item));
通过
Item set = malloc(sizeof(*set));
使用dereferenced变量本身作为sizeof()
运算符的参数可确保malloc的内存确实是您尝试分配的内容。
另请注意,在C中不必转换返回值malloc()
,因为void*
可以隐含地转换为任何指针。但是,如果您希望代码也是有效的C ++,则需要保留强制转换。
答案 3 :(得分:0)
我修复了崩溃问题。我必须定义如下设置:
Item set=Create();
感谢您的帮助。