[英]dynamic memory allocation in while
enum ev_type { ARRIVAL, DEP_Q0, DEP_Q1, DEP_Q2, DEP_Q3 };
struct node {
double time;
double duration;
enum ev_type event;
struct node * next;
}*evlist;
typedef struct node *nptr;
double min = 0;
void generate_new_customer(double clock, double duration)
{
nptr newev = (nptr)malloc(sizeof(nptr));
newev->duration = duration;
newev->time = min;
newev->event = ARRIVAL;
if (evlist == NULL)
{
evlist = newev;
evlist->next = NULL;
}
else
{
newev->next = evlist;
evlist = newev;
}
printf("%lf\n", evlist->time);
}
int main() {
start();
while (1) {
generate_new_customer(1, 6);
if (min > 480)
break;
min++;
}
return 0;
}
我正在尝试使用函数进行内存分配。 该函数按最小值工作。 如果 min 增加 480,它将停止并中断。 我查了一下。 但仍然发生调试断言失败错误。 我该怎么办?
您的malloc
不正确。 它仅在您需要分配结构本身的大小时才分配指向结构的指针的大小。
改变:
nptr newev = (nptr) malloc(sizeof(nptr));
进入:
nptr newev = malloc(sizeof(struct node));
更新:
我注意到您的功能正在推送到您的列表的前面。 这不是错误,但您可以稍微简化一下:
您的原始代码:
if (evlist == NULL) {
evlist = newev;
evlist->next = NULL;
}
else {
newev->next = evlist;
evlist = newev;
}
稍微重新排序:
if (evlist == NULL) {
evlist = newev;
newev->next = NULL;
}
else {
newev->next = evlist;
evlist = newev;
}
一些进一步的重新排序:
if (evlist == NULL) {
newev->next = NULL;
evlist = newev;
}
else {
newev->next = evlist;
evlist = newev;
}
因为newev->next = NULL
在evlist
保证为NULL
的if
子句中,我们可以将其更改为:
if (evlist == NULL) {
newev->next = evlist;
evlist = newev;
}
else {
newev->next = evlist;
evlist = newev;
}
现在, if
和else
是相同的。 所以,我们可以消除冗余,我们有:
newev->next = evlist;
evlist = newev;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.