为什么会出现这样的内存分配错误??molloc()函数问题?

xianbin 2001-08-25 01:22:52
各位大虾,小弟最近碰到了一个大难提,至今仍未能理解,请各位帮帮小弟。

我是用的编译器是Turbo C 2.0 系统环境是Windows2000下的MS-DOS模式。

问题是这样的:我使用fprint()函数存放了一个字符串,然后关闭文件。接着,我使用fscanf()函数读取文件中的内容,经过单步执行,以确认读入的数据正确,然后开始分配内存给链表指针data。问题就在这里,我分配给data的内存地址(data=(struct string *)malloc(sizeof(struct string));与读出的链表地址中的某个节点的地址一致!这是为什么?当我插入数据的时候,当然,data中的新数据也就覆盖了原链表中相同地址的那个节点的数据,天!这是怎么回事啊?
...全文
52 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
QXLEE 2001-08-25
能不能详细一点?
回复
movingboy 2001-08-25
你如果能看看Effective C++的Item 3的话,或许会有启发。摘录部分如下:
malloc和free(及其变体)会产生问题的原因在于它们太简单:他们不知道构造函数和析构函数。

假设用两种方法给一个包含10个string对象的数组分配空间,一个用malloc,另一个用new:

string *stringarray1 =
static_cast<string*>(malloc(10 * sizeof(string)));

string *stringarray2 = new string[10];

其结果是,stringarray1确实指向的是可以容纳10个string对象的足够空间,但内存里并没有创建这些对象。而且,如果你不从这种晦涩的语法怪圈(详见条款m4和m8的描述)里跳出来的话,你没有办法来初始化数组里的对象。换句话说,stringarray1其实一点用也没有。相反,stringarray2指向的是一个包含10个完全构造好的string对象的数组,每个对象可以在任何读取string的操作里安全使用。

注意static_cast做的工作与你做的强制转换类似。

回复
sim 2001-08-25
你的愿程序
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.4w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-08-25 01:22
社区公告
暂无公告