【发布时间】:2018-10-03 05:28:51
【问题描述】:
我用 C 语言创建了一个小程序来测试指向指针的指针。
当我使用函数(第 39 行)打印列表数据时,在将项目添加到列表后出现错误 3221225477。但是,当我对第 39 行进行注释并从第 59 行删除注释时,程序可以运行正常。
如果程序从上到下运行,为什么我会从操作系统(在本例中为 Windows)收到 ACCESS_VIOLATION 错误?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
struct employee{
int id;
char name[50];
char street[50];
};
typedef struct element* List;
struct element{
struct employee data;
struct element *next;
};
typedef struct element Elem;
List* list_create();
void list_print(List* list);
int list_is_empty(List* list);
int list_add(List* list, struct employee a);
int main(){
List* list = list_create();
struct employee a1;
a1.id = 10;
strcpy(a1.name, "John");
strcpy(a1.street, "Address XYZ");
list_add(list, a1);
//Sleep(5000); small pause, I thinking it might have something to do with thread.
//list_print(list); // *****line--39 *****;
return 0;
}
List* list_create(){
List* li = (List *) malloc(sizeof(List));
if(li != NULL)
*li = NULL;
return li;
}
int list_add(List* list, struct employee emp){
Elem* n1 = (Elem *) malloc(sizeof(Elem));
n1->data = emp;
n1->next = *list;
list = &n1;
list_print(list); // *****line--59 *****;
}
void list_print(List* list){
Elem aux = **list;
printf(" **lista Id: %d\n", aux.data.id);
printf(" **lista name: %s\n", aux.data.name);
printf(" **lista name: %s\n", aux.data.street);
}
【问题讨论】:
-
您应该做的第一件事是停止类型定义指针。删除这个
typedef struct element* List;并按照element*和element**编写所有内容。也许有些错误会变得更加明显。 -
@n.m.谢谢,我会检查代码并进行更改。
标签: c pointers memory-management