我有一个结构定义为
struct _element;
typedef struct _element Element;
struct _element {
char* StudentName;
char* StudentID;
int StudentMarks;
};
指向
Element
结构的指针全局声明为Element * ePtr;
现在我有了一个函数,它返回指向
Element
结构的指针。其定义如下所示。在这个函数中填充全局声明的同一个ePtr
,然后返回。Element * CreateElement(char * jName, char * jID, int jMarks)
{
printf("CreateElement \n");
puts(jName); puts(jID); printf("%d\n",jMarks);
ePtr->StudentName = (char*)malloc(sizeof(char)*strlen(jName));
strcpy(ePtr->StudentName, jName);
printf("After Creation \n");
puts(ePtr->StudentName);
return ePtr;
}
我使用
ePtr = CreateElement(iName,iID,iMarks);
从另一个函数。参数中存储的值是正确的,如函数调用行下面的
puts
和printf
命令所示。我的问题是我在
ePtr->StudentName = (char*)malloc(sizeof(char)*strlen(jName));
行。我用gdb检查过了。
最佳答案
您是否为ePtr
分配了内存?
仅仅全局声明一个指向这个结构的指针是不够的:您还需要为它malloc
一些内存:ePtr = malloc(sizeof(Element);
。
还要确保在malloc
中为空终止符的字符串添加一个额外的槽。
通常,总是初始化指向NULL
的指针-当声明全局时可以这样做:Element *ePtr = NULL;
。此外,尝试将ePtr
移出全局范围,并在使用指针之前检查NULL
,就像ePtr
方法中的CreateElement
一样。