100白送了!!有敢进来的没 好象可以:MyData=(struct datasource*)malloc(sizeof(struct datasource)); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼上的,问题不是这里了!我刚才写错了,你说的对malloc(sizeof(struct datasource));返回的是一个void*的指针要把它再转化一下才能用的! 其实,如果是struct datasource{ char *name; char *Memo;};那么结构体的大小是8,因为一个指针占4个字节。 当然可以了。 你先开一个大的缓冲来度入数据,然后安装数据大小来实际分配空间。不过我建议你还是使用现成的类。在 MFC 下使用 CMapStringToString 等在 ATL 7.0 先使用 CAtlMap<CString,CString> 在 C++ 下使用 map 等 STL 类。自己实现当然可以,不过稳定性和强度需要测试。 需要动态的只是memo,而DataSource本身可以随便处理 我觉得你分配的只是结构体包含指针的内存,每一个指针指向的内存还需要再一次分配,释放时按次序释放。 MyData=malloc(sizeof(struct datasource)); MyData->Memo=(char*)malloc(自定义); ... 备注型总有个长度限制吧。先做一缓冲区,大小为备注型的长度。先读数据进缓冲区,然后根据数据的大小分配内存,把指针赋值给MyData->Memo。 我觉得你分配的只是结构体包含指针的内存,每一个指针指向的内存还需要再一次分配,释放时按次序释放。 MyData=malloc(sizeof(struct datasource)); MyData->Memo=(char*)malloc(自定义); ... 你的结构里面保存指针,内容new出来啊. sclzmbie(梦里红尘) ( )和cwanter(娘子,出来一起看上帝!) 同意你们的想法,这使兄弟突然想起以前在学校期间用TC来实现复制,粘贴,剪切等操作也是并不知道用户要复制多少东西只是开辟了一个非常大的缓冲区,然后在读缓冲,根据读到的再开辟实际大小唉~~~~~~~~~~~~~~长时间不用全都忘了!!!伤心,结贴~~~ 你的这个结构体很成问题,按我的习惯,如果用结构体,那么所有的数据都是存储在结构体范围内的,也就是不用指针。否则你malloc没多大用处,也不敢随便清0,还会有内存碎片。空间浪费一点没关系,把指针改成数组吧。 不知道你使用的什么环境,如果支持MFC的话,可以考虑使用CString,它是可以动态的分配内存的。struct datasource{ CString name; CString Memo; ..... .....};这样你最大的好处是不用考虑内存的释放问题。如果不支持MFC的话,你可以使用MyData->Memo=(char*)malloc(自定义);或者MyData->Memo= new char[自定义];但是你要使用Free或者delete释放内存。再或者你可以自己写一个支持动态分配的字符串类,模仿CString,也不是很难。我就写过一个。 Active OCX 中弹出窗口 一个不知道错误的错误 程序运行堵在那里了 分割窗口时产生的编译错误 管理map的map如何建立? 这个问题请大哥们帮我看看 如何将TreeView中的Item拖拽到视图中去 求助BCGContralBar问题 调试过程中遇到的错误,请求帮忙! 注册表的位置 请问如何释放静态数组 用CSocket写的接受pop3回应的问题!请各位高手指教
我刚才写错了,你说的对
malloc(sizeof(struct datasource));返回的是一个void*的指针
要把它再转化一下才能用的!
struct datasource
{
char *name;
char *Memo;
};
那么结构体的大小是8,因为一个指针占4个字节。
在 ATL 7.0 先使用 CAtlMap<CString,CString>
在 C++ 下使用 map 等 STL 类。自己实现当然可以,不过稳定性和强度需要测试。
我觉得你分配的只是结构体包含指针的内存,每一个指针指向的内存还需要再一次分配,释放时按次序释放。 MyData=malloc(sizeof(struct datasource));
MyData->Memo=(char*)malloc(自定义);
...
我觉得你分配的只是结构体包含指针的内存,每一个指针指向的内存还需要再一次分配,释放时按次序释放。 MyData=malloc(sizeof(struct datasource));
MyData->Memo=(char*)malloc(自定义);
...
用TC来实现复制,粘贴,剪切等操作也是并不知道用户要复制多少东西
只是开辟了一个非常大的缓冲区,然后在读缓冲,根据读到的再开辟实际大小唉~~~~~~~~~~~~~~长时间不用全都忘了!!!伤心,结贴~~~
{
CString name;
CString Memo;
.....
.....
};这样你最大的好处是不用考虑内存的释放问题。如果不支持MFC的话,你可以使用
MyData->Memo=(char*)malloc(自定义);
或者MyData->Memo= new char[自定义];但是你要使用Free或者delete释放内存。
再或者你可以自己写一个支持动态分配的字符串类,模仿CString,也不是很难。我就写过一个。