c++链表的一个malloc问题

发布于 2022-09-05 01:55:46 字数 892 浏览 17 评论 0

我定义了一个结构体如下:

typedef struct CommandNode {
    int type;
    vector<string> command;
    CommandNode *next;
} CommandList,*CommandListNodes;

这个结构体中有一个vector,现在想当作链表使用,我不是很清楚对于vector该如何malloc。

自己之前随便malloc一个1000,有时候会出现下面这样的问题:

malloc: *** error for object 0xffbbe8909090ffff: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

另外自己不知道这样使用可以不可以:

    CommandListNodes listNodes = new CommandList;
    CommandListNodes p = listNodes;
    
    p->command.push_back("121212");
    
    p->type=100;
    p->next=new CommandList;
    
    p = p->next;
    
    p->command.push_back("343434");
    
    p->type=200;
    p->next=new CommandList;
    
    p = p->next;

以及和malloc有什么区别,目前我对这部分知识理解较为混乱,网上没找到特别合适的内容希望有朋友能梳理一二,谢谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

千年*琉璃梦 2022-09-12 01:55:46

永远记住C++中的动态内存分配是和指针相关的,举例来说,要访问一个int型指针所指的内容,其内存必须是被分配的。这意味着如果一个指针不是用&(取址)或者赋值被初始化,那么它必须用new或者malloc之类的动态内存分配手段去初始话,保证指针所指内存存在。对于vector 这种来说,你既可以用vector<T> name来声明一个vector,又可以用vector<T > * p = new vector<T> 来声明并定义一个指向vector的指针。

○闲身 2022-09-12 01:55:46

vector也是通过new分配内存的,vector内部是通过分配器进行内存管理

是伱的 2022-09-12 01:55:46

c++new首先会分配内存,然后调用对象的构造函数。
c中的malloc只会做第一步,如果要用malloc来达到new的效果,需要借用placement new在指定的内存上构造对象,这当然对你来说比较复杂
所以你还是老老实实用new来新建一个对象就行了,这和malloc的效果是一样的,不过要记得使用delete删除对象,而不是free

魄砕の薆 2022-09-12 01:55:46

如果是按你这么用的话,那最终应该是会产生内存泄漏的,因为当你执行p=p->next的时候,当前p所指向的堆区内存地址就丢失了,之后这块内存就无法delete掉了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文