好象可以:MyData=(struct datasource*)malloc(sizeof(struct datasource));

解决方案 »

  1.   

    楼上的,问题不是这里了!
    我刚才写错了,你说的对
    malloc(sizeof(struct datasource));返回的是一个void*的指针
    要把它再转化一下才能用的!
      

  2.   

    其实,如果是
    struct datasource
    {
     char *name;
     char *Memo;
    };
    那么结构体的大小是8,因为一个指针占4个字节。
      

  3.   

    当然可以了。 你先开一个大的缓冲来度入数据,然后安装数据大小来实际分配空间。不过我建议你还是使用现成的类。在 MFC 下使用 CMapStringToString 等
    在 ATL 7.0 先使用 CAtlMap<CString,CString> 
    在 C++ 下使用 map 等 STL 类。自己实现当然可以,不过稳定性和强度需要测试。
      

  4.   

    需要动态的只是memo,而DataSource本身可以随便处理
      

  5.   


        我觉得你分配的只是结构体包含指针的内存,每一个指针指向的内存还需要再一次分配,释放时按次序释放。    MyData=malloc(sizeof(struct datasource));
        MyData->Memo=(char*)malloc(自定义);
        ...
        
      

  6.   

    备注型总有个长度限制吧。先做一缓冲区,大小为备注型的长度。先读数据进缓冲区,然后根据数据的大小分配内存,把指针赋值给MyData->Memo。
      

  7.   


        我觉得你分配的只是结构体包含指针的内存,每一个指针指向的内存还需要再一次分配,释放时按次序释放。    MyData=malloc(sizeof(struct datasource));
        MyData->Memo=(char*)malloc(自定义);
        ...
        
      

  8.   

    你的结构里面保存指针,内容new出来啊.
      

  9.   

    sclzmbie(梦里红尘) (  )和cwanter(娘子,出来一起看上帝!) 同意你们的想法,这使兄弟突然想起以前在学校期间
    用TC来实现复制,粘贴,剪切等操作也是并不知道用户要复制多少东西
    只是开辟了一个非常大的缓冲区,然后在读缓冲,根据读到的再开辟实际大小唉~~~~~~~~~~~~~~长时间不用全都忘了!!!伤心,结贴~~~
      

  10.   

    你的这个结构体很成问题,按我的习惯,如果用结构体,那么所有的数据都是存储在结构体范围内的,也就是不用指针。否则你malloc没多大用处,也不敢随便清0,还会有内存碎片。空间浪费一点没关系,把指针改成数组吧。
      

  11.   

    不知道你使用的什么环境,如果支持MFC的话,可以考虑使用CString,它是可以动态的分配内存的。struct datasource
    {
     CString name;
     CString Memo;
     .....
     .....
    };这样你最大的好处是不用考虑内存的释放问题。如果不支持MFC的话,你可以使用
    MyData->Memo=(char*)malloc(自定义);
    或者MyData->Memo= new char[自定义];但是你要使用Free或者delete释放内存。
    再或者你可以自己写一个支持动态分配的字符串类,模仿CString,也不是很难。我就写过一个。