精华内容
下载资源
问答
  • 使用的malloc函数新创立的结构体 中的string类型出现了问题,即读取字符串的字符时出错,无法读取内存 最后发现是新建节点时出现了错误:(C语言中没有stringmalloc无法识别) TreeNode * t = (TreeNode *) ...

    使用的malloc函数新创立的结构体 中的string类型出现了问题,即读取字符串的字符时出错,无法读取内存

    最后发现是新建节点时出现了错误:(C语言中没有string类 用malloc无法识别)

    TreeNode * t = (TreeNode *) malloc(sizeof(TreeNode)); (我copy书中的源码,用的c语言)

    但是为了使用方便,在结构体中使用了string类

    typedef struct treeNode
    {
      struct treeNode * child[MAXCHILDREN];
      struct treeNode * sibling;
      TokenType op;
      int val;
      string name;
      ExpKind expkind;
    }TreeNode;

    所以用C语言的malloc函数无法为string类对象分配正确的内存,因此出现了错误

    修改使用C++的new函数来创建新的树节点则问题消失:

    TreeNode * t = new TreeNode;

    网上搜集的资料:

    对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
    因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
    我们不要企图用malloc/free来完成动态对象的内存管理,应该用new/delete。由于内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free和new/delete是等价的。

    上面的回答解决了我的问题:
    结构体中有string类 ,string类的构造函数在malloc时无法执行,出现我上面的问题
    new可以认为是malloc函数加构造函数的执行。
    参考博文 http://blog.csdn.net/zjc156m/article/details/16819357
    http://blog.csdn.net/hazir/article/details/21413833

    展开全文
  • #include<string> using namespace std; struct temp ...  需要用用new来分配内存,malloc不会调用结构函数  结构体内的string不定长,不能动态分配内存。 #include<string> using namespace std; stru
  • C++ 结构体string类型

    2020-04-13 20:18:09
    struct sv { std::string s; //词法分析的类型 std::string v; //词法分析变量的值 }; 要写成std::string

    struct sv
    {
    std::string s; //词法分析的类型
    std::string v; //词法分析变量的值
    };
    要写成std::string

    展开全文
  • 今天在群里听大佬们讲课,结构体string 最好定长,不然频繁使用会报指针异常 如果以前没有定长,且没有频繁的去初始化结构体,可以使用下面的语句,在fillchar之前 大佬们经验之谈,又学了一招 finalize(rec)...

    今天在群里听大佬们讲课,结构体里 string[30] 最好定长,不然频繁使用会报指针异常

    如果以前没有定长,且没有频繁的去初始化结构体,可以使用下面的语句,在fillchar之前

    大佬们经验之谈,又学了一招

    finalize(rec);
    fillchar(rec, sizeof(rec), 0);

     

     


    只能说明一个问题:你没用dispose来释放对应的结构体,用的是FreeMem


    或者在dispose之前,你memset/fillchar了结构体


    或:dispose(p: Pointer),而不是:dispose(p: PDataType);


    record不是可以由系统自动内存管理?


    某些情况下不可以,某些可以


    声明了record,从来没手工释放过


    全是当变量在用。用完就不管了


    大部可以的,但出现泄露,一般就是用了指针操作,然后用了freeMem,而不是dispose


    或者上面说的几种情况

    展开全文
  • <code class="language-cpp">#include<bits/stdc++.h> #include<string.h> using namespace std; struct name{ string ke;... string va;... string an,bn;...‘=’赋值输出为空</p>
  • 结构体使用string

    千次阅读 2017-06-13 12:16:18
    程序中的内存错误是因为使用malloc分配一个结构体内存,但是string是一个类。并没有调用string的构造函数,所以string在malloc之后没有正确构造,导致使用时段错误。 下面测试程序前两个直接声明结构体和new出来的,
    1. malloc只是负责申请一块内存,没有任何其他动作。
    2. 直接声明结构体或者new 一个结构体指针,会调用默认构造函数。如果结构中包含类,同样会调用成员类的默认构造函数。
    3. 程序中的内存错误是因为使用malloc分配一个结构体内存,但是string是一个类。并没有调用string的构造函数,所以string在malloc之后没有正确构造,导致使用时段错误。

    下面测试程序前两个直接声明结构体和new出来的,都可以正确赋值,但是malloc的那块,赋值就段错误。

    #include <stdio.h>  
    #include <stdlib.h>  
    #include <string.h>  
    #include <string>  
    #include <iostream>  
    
    using namespace std;  
    
    class A  
    {  
    public:  
        A()  
        {  
            cout << "construct in A" << endl;  
        }  
    };  
    
    typedef struct tagTEST  
    {  
        A a;  
        string s;  
        char* ch;  
        int i;  
    } TEST;  
    
    int main()  
    {  
        TEST t;  
        t.s = "111";  
        cout << t.s << endl;  
    
        TEST* pNewTest = new TEST;  
        pNewTest->s = "222";  
        cout << pNewTest->s << endl;  
    
        TEST* pMallocTest = (TEST*)malloc(sizeof(TEST) * 1);  
        pMallocTest->s = "333";  
        cout << pMallocTest->s << endl;  
    
        return 0;  
    }  
    

    转载:http://blog.csdn.net/bees007/article/details/38614327

    展开全文
  • C++结构体中的string类型

    千次阅读 2020-08-19 20:51:14
      今天在学习链表时,参考了一篇博客来学习C++中的链表,然而在最后运行最后的程序: #include<iostream> #include<... string name; string sex; }data; typedef struct listpoint { data *inf
  • 关于struct结构体string的问题

    千次阅读 2019-08-25 16:23:23
    struct info { // string name; //error char name[20]; //ok int sex; };...(2)只是在内存中用是可以用string的。 不能记录到文件里面,如果记录到文件里面,就会有问题。 (3)stri...
  • 结构体string类型成员

    千次阅读 2017-11-07 00:03:58
    结构体string类型成员
  • c++结构体string无法malloc分配内存,需要用用new来分配内存,malloc不会调用结构函数,结构体内的string不定长,不能动态分配内存。
  • 结构体使用string的错误

    千次阅读 2016-10-11 11:53:43
    string x; int y; }nnx,*pnnx; pnnx p=new nnx[10]; sprintf((char*)p[0].x.c_str()," thread send msg: hello.\r\n"); delete[] p; p=NULL; //结构体x初始化时默认为空字符串,x.size()为0,在
  • 结构体中定义字符串的成员的时候要注意定义成string有时候,在某些程序中给成员赋值会崩溃,但是不确定到底什么情况会崩溃。运行报错如下: Program received signal SIGSEGV, Segmentation fault. 0xb665489c...
  • package main import ( "fmt" "strconv" ) func main(){ t1 := t { 1, "WangWei", []string{"aaa","bbb","ccc"}, ... fmt.Println(t1.String()) ... name string ...func (t1 t) String() string { retu
  • 结构体中存在string类型成员

    千次阅读 2015-12-21 17:34:04
    #include #include #include using namespace std; typedef struct node{ ...string str; }NODE; int main(){ string var = "lirao"; NODE * node = (NODE *)malloc (sizeof(NODE)
  • 结构体如下: struct StruTest { string strSrcId; string strDestId; HPR_INT32 iCount; StruTest() { memset(this, 0, sizeof(StruTest)); iCount= -1; } }; 引发问题: StruTest struTest; ...
  • C语言实现string结构体

    2021-08-31 14:19:20
    string.h #ifndef STRING_H #define STRING_H #include <malloc.h> #include <stdio.h> #include <string.h> typedef struct { char * s; int len; } string; string string_construct...
  • 含有string结构体初始化时,不能直接对结构体对象={0}操作,否则会引起崩溃,如 struct demo { std::string info_;...对结构体初始化或者使用memset或者采用 demo dev={"",0},这样的形势来初始化,切记 ...
  • #include #include <string> #include using namespace std; typedef struct node{ string str; }NODE;int main(){ string var = "lirao"; NODE * node = (NODE *)malloc (sizeof(NODE)); node->
  • string name="XiaoMing"; } int main() { Student st1; st1.age=10; st1.name="XiaoHong"; Student *st2=new Student; st2->age=13; str->name="xiaogang"; int SumAge=st1.age+st2->age; ...
  • 错误: 原因:主要是cstring这个头文件,我们换成string就可以了。
  • 网上搜了下有人说string作为结构体成员变量时如果memset此结构体时会有内存泄露,再在代码里搜了下发现代码里果然memset了一个带string成员变量的结构体。 去掉memset后不再有内存泄漏。 strin...
  • 结构体中有string变量

    2019-08-19 18:04:59
    结构体中将char *改成std::string 后,发现声明结构体会导致崩溃。 如下所示: struct my_parma { string name; // 不要这样,有时候会崩溃 char name2[64]; // 可以这样 char* pname; // 可以这样 int age; ...
  • m_spec string "种类_tag_反射" } //接收器使用 (struct_name * StructType)和 (struct_name StructType)不一样 //Go语言中默认全部传递的是拷贝 //在用法上优先考虑使用 (struct_name *StructType),避免传值 ...
  • 今天在写代码时遇到一个问题:将定义的一个含有string类型的结构体使用memset进行初始化。发现初始化之后的结构体不可以使用了。 问题解决:(链接) memset初始化std::string对象时,按字节顺序将std::string对象...
  • 在一些需要将结构体存储起来,稍后再取出使用的情况,可以将结构体存入std::string中,之后再取出。 这样的好处是: ①可以支持多种结构类型 ②临时存储信息的数据结构不需要随着结构体变化同步变化,避免了修改...
  • 结构体中定义string变量

    千次阅读 2013-09-15 22:33:59
    我编写一个程序,在结构体中定义了一个string类型类型的变量:如下: typedef struct GS_DB_Event_Item_Stru {  string strFieldName;  uint16 usType; //1 // 1 number, 2 string  union  {  int32 nValue...
  • #include<string> enum gender{female,male}; //构造链表结点 typedef struct _Node{ string name; gender sex; struct _Node *next; }Node,*Node_Ptr; //结点生成函数 Node_Ptr init_node(){ Node_Ptr node...
  • 详见:https://blog.csdn.net/s3olo/article/details/11715143

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 189,436
精华内容 75,774
关键字:

结构体用string