我有一个结构定义为

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);

从另一个函数。参数中存储的值是正确的,如函数调用行下面的putsprintf命令所示。
我的问题是我在
ePtr->StudentName = (char*)malloc(sizeof(char)*strlen(jName));

行。我用gdb检查过了。

最佳答案

您是否为ePtr分配了内存?
仅仅全局声明一个指向这个结构的指针是不够的:您还需要为它malloc一些内存:ePtr = malloc(sizeof(Element);
还要确保在malloc中为空终止符的字符串添加一个额外的槽。
通常,总是初始化指向NULL的指针-当声明全局时可以这样做:Element *ePtr = NULL;。此外,尝试将ePtr移出全局范围,并在使用指针之前检查NULL,就像ePtr方法中的CreateElement一样。

10-08 03:54