struct node {
void *info;
struct node *nextNode;
}
struct linked {
struct node* Head;
struct node* Tail;
}
struct linked* pro[32]
void initialize_list()
printf("seg 1\n");
for (int i = 0; i < 32; i++) {
if(!(pro[i] = (struct linked *) malloc(sizeof(struct linked)))) {
pro[i]->Head = pro[i]->Tail = NULL;
}
}
printf("seg 2\n");
}
我不知道为什么,但是当我在main中调用initialize_list()函数时
int main() {
initialize_list();
}
我有时会得到输出:
seg 1
segmentation fault
有时
seg 1
seg 2
我的意思是,有时,当我运行程序 8 次时,可以说,它可能在 6 次运行中以正确的输出运行,在 2 次运行中可能会产生段错误输出。 你能帮我找出这个初始化有什么问题吗?我想为什么它会造成一些内存泄漏?
最佳答案
if(!(pro[i] = (struct linked *) malloc(sizeof(struct linked)))) {
应该是
if((pro[i] = (struct linked *) malloc(sizeof(struct linked)))) {
或者更好(不要强制转换malloc
):
if((pro[i] = malloc(sizeof(struct linked)))) {
否则你会告诉在 malloc
失败时初始化成员
请注意,您还可以使用calloc
,在这种情况下,无需将成员初始化为NULL
:
for (int i = 0; i < 32; i++) {
pro[i] = calloc(1, sizeof(struct linked));
if (pro[i] == NULL) // And always check the return
{
perror("calloc");
exit(EXIT_FAILURE);
}
}
关于c - 为什么会出现内存泄漏(此初始化导致的段错误)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65005504/