c - Sigtrap 代码中只有一个免费

标签 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 会如何变化?尝试调试并在 free 中我收到 SIGTRAP 错误,在使用 free() 的行上,但是这是我创建的唯一动态分配的对象,并且我之前没有使用过 free 。那么 malloc 或 free 的语法是否有我遗漏或有问题的地方?

最佳答案

您需要更正

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

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

关于c - Sigtrap 代码中只有一个免费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43705731/

相关文章:

c - 尝试释放以前的 malloc 时出错

控制台仅对所有 double 显示 0

c - gcc 使用 malloc 进行内存对齐

c - 带 fread 的无限循环

c - 使用按键的 GLUT 旋转相机无法正常工作

c - 瓦尔格林 |大小为 8 的无效读取 |地址 0x7a41270 在大小为 4 的 block 内是 0 个字节,已分配

c - 用于编写虚拟机软CPU的分区内存

c++ - 每次需要其中一个类的实例时,拥有一组类的额外拷贝或从文件中读取是否会占用更多内存?

python - OSX 如何在使用 C++ 扩展 python 时调试 malloc 错误?

c - C语言中的答案有歧义