malloc和free:正在释放的指针未分配

弧线676

当我发现有关malloc方法和类似的内存管理方法时,我一直试图在C编程中变得更加“内存感知” 但是,当我尝试在程序中reallocchar*实例分配尽可能少的内存时,我发现该实例所存储的数据并不像我想象的那样多。

这是我的代码:

int foo(char * arg){
    if(condition){
        //code here
    }else if(other_condition){
        char * cmd = malloc(5);
        fgets(cmd,sizeof(cmd),stdin);
        //more code here
        if(another_condition){
            //more code
            cmd = realloc(cmd,new_size) //once in this if block, but also once in another block
            fgets(cmd,sizeof(cmd),stdin);
            //more code
        }
        //more else-if blocks here
        free(cmd)
    }
    //more else-if blocks here
}

具体来说,在上面的代码段中new_size为255,尽管在其他地方已将其设置为其他大小。问题是,当我运行该程序时,我只能得到7个字母的输入。

输出示例:

...
Enter filename: document1
Loading file "documen"
Load failed
...
(here the next time fgets is called it fails because "t1" is not valid input for the program)

我知道它正在接收,"t1"因为我没有清除输入缓冲区,但是我要解决的问题是我只收到输入的前7个字符。如果我sizeof(cmd)在中间调用,它告诉我占用的内存cmd为8。我也尝试使用char * cmd = malloc(5 * sizeof(char))分配内存cmd = realloc(cmd,255 * sizeof(char))但并没有解决问题。我也许应该提到的是,如果我使用声明变量char cmd[255]的语法和我不叫mallocreallocfree任何地方这个问题不再出现。

团队
fgets(cmd,sizeof(cmd),stdin);

cmd是一个,char*而不是一个char[]因此,它的大小始终是指针的大小,而不是数组的大小。

您应该跟踪自己分配的块大小。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有唯一指针的右值和移动语义:对象0x7ffee5c7b670错误:未分配正在释放的指针

使用malloc和free了解指针

C:未分配正在释放的malloc错误指针

释放等于malloc指针的指针

使用Malloc和Free调试指针

Z3,C ++:未分配正在释放的指针

为什么将对象作为值传递会导致malloc:***对象0x100604c50错误:未分配指针被释放

malloc:***反序列化期间未分配释放对象指针的错误

malloc:对象0x00的错误:未分配正在释放的指针

未分配指针

正在释放的Rust指针未分配错误

使用cython和基于FFTW的外部c库并行的“未分配指针,未分配”错误

释放arr会返回错误malloc:***未分配要释放的对象指针的错误

C程序问题“未分配释放的指针”

“未分配被释放的指针。” malloc之后发生错误,重新分配

Mac Terminal-打开终端时出现“未分配指针释放”错误

潜在的指针问题和地址未堆栈,未分配或(最近)释放

C“释放指针未分配”错误

未分配的delete []指针未分配

删除引用时未释放的指针未分配错误

C:释放的指针未分配-调用free时

中止陷阱6:释放未分配的指针

释放的C ++指针未分配错误

即使释放指针未分配,也未分配

实现Matrix <T>类时未分配释放的指针

C++中的双向链表(被释放的指针未分配)

malloc:对象 0x120e06884 的 *** 错误:被释放的指针未分配

JVMTI 分配/解除分配和 malloc/free

C++ 错误:“未分配被释放的指针”