Sigtrap只有一个免费代码

时间:2017-04-30 11:10:26

标签: c memory malloc free

所以这是我的问题,我创建了这个结构:

typedef struct foo *fooPtr;
struct foo {
foo2Ptr node;
foo3Ptr node;
char *Random;
};

fooNew(char* String) {
    int StringLength;
    StringLength = strlen(String) + 1;
    Newfoo = (fooPtr *)malloc(sizeof(fooPtr));
    Newfoo->Random = (char*)malloc(StringLength * sizeof(char));
    strcpy(Newfoo->Random, String);
    /*Rest of foo members initialized below....*/
}

fooChangeRandom(fooPtr Foo, String) {
    int StringLength;
    StringLength = strlen(String) + 1;
    free(Foo->Random);
    Foo->Random = (char*)malloc(StringLength * sizeof(char));
    strcpy(Foo->Random, String);
}

但每当我尝试打印新字符串时,我都会得到随机字符。我记得C要求我释放我用malloc,calloc或realloc分配的所有内容,那么当fooNew结束时Random会如何变化?尝试调试并在免费中获取SIGTRAP错误,在free()被使用的行上,但是这是我创建的唯一动态分配的对象,我以前没有免费使用过。那么我缺少什么东西或者malloc或free的语法有什么问题吗?

1 个答案:

答案 0 :(得分:0)

您需要更正

Newfoo = (fooPtr *)malloc(sizeof(fooPtr));

Newfoo = (fooPtr *)malloc(sizeof(struct foo));