LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 927|回复: 4

GDB调试的格式还是内存分配的问题??

[复制链接]
发表于 2005-12-6 11:22:00 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <stdlib.h>
int main(){
        int i,j;
        int **t = malloc(3 * sizeof(int *));
        for(i =0;i < 3;i++)
                t = malloc(3 * sizeof(int));
        for(i =0;i < 3;i++)
                for(j = 0;j < 3;j++)
                        t[j] = 6;
        for(i =0;i < 3;i++){
                printf("\n");
                for(j = 0;j < 3;j++)
                        printf("%d ",t[j]);
        }
}
打印出来是{6,6,6,6,6,6,6,6,6,}
但是GDB中用'p/d **t@11'的时候打印出来的是{6,6,6,17,6,6,6,17,6,6,6}
这里面的17到底是什么??
发表于 2005-12-6 13:57:53 | 显示全部楼层
打印一下t[0]到t[3]的指针值就知道了,**t中存贮的数据并不是连续的,因为你是分3次malloc出来的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-6 14:42:21 | 显示全部楼层
但中间的值每次都是17??
回复 支持 反对

使用道具 举报

发表于 2005-12-6 17:16:30 | 显示全部楼层
17 = 16 + 1
前面的16表示申请的内存大小,后面的1的含义忘了.

你可以搜一下以前 warning3 写过的一篇关于堆溢出的文章
回复 支持 反对

使用道具 举报

发表于 2005-12-7 09:53:23 | 显示全部楼层
尝试思考一下内存分配问题,就能找到答案了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表