malloc函数类型转换问题
时间:2010-06-30
来源:互联网
请教一下malloc函数问题:
建立链表时,每次只是malloc一个节点,节点本身并不大,但是malloc也是要为这个节点开辟至少一个内存页,
我觉得利用率比较低,而且可能导致内存碎片,所以我想每次malloc时多建几个节点,如下:
typedef struct {
int a;
struct node * n;
} node;
int main()
{
node * p, *q;
int i = 10;
p = (node *)malloc(sizeof(node) * 10);
q = p;
while (i--) {
q->n = (node*)(q+1);//这行编译不过去,错误信息:warning: assignment from incompatible pointer type
q->a = i;
q++;
}
free (q);
return 0;
}
但是编译不过去,
p,q 都定义为node *,为什么还包类型不兼容?
建立链表时,每次只是malloc一个节点,节点本身并不大,但是malloc也是要为这个节点开辟至少一个内存页,
我觉得利用率比较低,而且可能导致内存碎片,所以我想每次malloc时多建几个节点,如下:
typedef struct {
int a;
struct node * n;
} node;
int main()
{
node * p, *q;
int i = 10;
p = (node *)malloc(sizeof(node) * 10);
q = p;
while (i--) {
q->n = (node*)(q+1);//这行编译不过去,错误信息:warning: assignment from incompatible pointer type
q->a = i;
q++;
}
free (q);
return 0;
}
但是编译不过去,
p,q 都定义为node *,为什么还包类型不兼容?
作者: tianhailong 发布时间: 2010-06-30
- typedef struct {
- int a;
- struct node * n;
- } node;
作者: ljysyn 发布时间: 2010-06-30
QUOTE:
请教一下malloc函数问题:
建立链表时,每次只是malloc一个节点,节点本身并不大,但是malloc也是要为这 ...
tianhailong 发表于 2010-06-30 19:46
建立链表时,每次只是malloc一个节点,节点本身并不大,但是malloc也是要为这 ...
tianhailong 发表于 2010-06-30 19:46
建议LZ先看看C的struct是如何定义的,还有这样子建立链表没的啥子意义,反而每个节点还浪费4个字节空间。
作者: wmmy2008 发布时间: 2010-06-30
1.
复制代码
2.程序的内存分配有问题。
- typedef struct tag_node{
- int a;
- struct tag_node *n;
- } node;
作者: memoryboxes 发布时间: 2010-06-30
晕还有这样定义结构的,昏。
看楼主的样子还是用结构数组好了。。。
看楼主的样子还是用结构数组好了。。。
作者: peijue 发布时间: 2010-06-30
QUOTE:
但是malloc也是要为这个节点开辟至少一个内存页,我觉得利用率比较低
tianhailong 发表于 2010-06-30 19:46
tianhailong 发表于 2010-06-30 19:46

说正题
- typedef struct { // 一个匿名的tag A
- int a;
- struct node * n;
- } node; // struct A 被赋予一个别名
- // 别名叫node
名a , 类型int
名n , 类型struct node*
node 是一个tag, 被隐式声明
其定义未知
也就是说, 2个 "node" 指的是不同的东西
3行隐式声明的是一个tag 叫 "node"
其定义未知, 为不完全类型
4行是将一个匿名的tag赋予别名 "node"
这tag根本就是个狗屁设计, 完全是迷惑人用的。
作者: OwnWaterloo 发布时间: 2010-07-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28