linux 64位系统的指针为8字节
来源:互联网 发布:剑侠情缘2白金版 mac 编辑:程序博客网 时间:2024/05/29 16:03
//DeclareFunTest.c#include "LoadBuffer.h"int main(){int i;UserBuffer *buf;buf=LoadBuffer();printf("in main,%%p=%p,%%x=%x\n",buf,buf);printf("size of int=%d\nsize of pointer=%d\n",sizeof(i),sizeof(buf));long count=0;for(i=0;i<buf->size;++i){buf->buffer[i]=i+1;count += buf->buffer[i];}printf("count=%d\n",count);return 0;}
// LoadBuffer.c#include"LoadBuffer.h"UserBuffer* LoadBuffer(){UserBuffer *ptr;ptr=calloc(sizeof(UserBuffer),1);ptr->size=BUFFER_SIZE;printf("in LoadBuffer,%%p=%p,%%x=%x\n",ptr,ptr);return ptr;}
// LoadBuffer.h#include<stdio.h>#include<stdlib.h>#ifndef _LOAD_BUFFER_H_#define _LOAD_BUFFER_H_#define BUFFER_SIZE 102400typedef struct{int size;int buffer[BUFFER_SIZE];}UserBuffer;//注释函数定义,则在调用时,程序默认返回int//UserBuffer * LoadBuffer();#endif
#makefileDeclareFunTest: DeclareFunTest.c LoadBuffer.c LoadBuffer.hgcc DeclareFunTest.c LoadBuffer.c -o DeclareFunTest -g -fPICrun:./DeclareFunTestdebug:gdb DeclareFunTest -x DeclareFunTest.cmdclean:rm -rf libLoadBuffer.so DeclareFunTest
#DeclareFunTest.cmdbreak LoadBuffer.c:7commandsprintf "in LoadBuffer,ptr=%lx\n",ptrcontinueendbreak DeclareFunTest.c:8commandsprintf "in main,buf=%lx\n",bufcontinueendr
注释掉LoadBuffer.h 中的函数原型定义,则在main函数中,gcc在编译时认为LoadBuffer函数返回int类型,而不是指针类型。
而在64为系统中,int占4个字节,而指针占8字节,导致数据截断,从而导致程序访问错误的内存空间。
0 0
- linux 64位系统的指针为8字节
- 系统32位指针变量为4字节系统16位指针变量2个字节
- 32和64位系统占的字节(int char long double 指针等)
- 32位系统指针占4个字节,那64位系统呢?
- 在32位处理器上指针的长度为4字节,为什么是4字节,而不是16字节,或者32字节
- c++32位系统和64位系统中类型的字节区别
- 32位机指针为什么是4个字节 64位与32位机的区别
- 32位系统和64位系统字节数
- 64位系统指针对齐
- 32位Linux与64位Linux系统中指针 小小差别
- 看你的linux编译系统是32位还是64位最简单的方法以及不同数据类型占用字节个数
- sizeof(a)的值及32位、64位系统下各个数据类型的字节
- 32位与64位系统基本数据类型的字节数
- 32位与64位系统基本数据类型的字节数
- 关于lua字节码在32位和64位系统上不兼容的问题
- Linux系统Domino704升级为901 64位的步骤及注意事项
- 32位和64位系统区别和数据字节
- 32位和64位系统区别及字节对齐
- C语言字符串的常见特殊操作(除了string.c实现的那些接口)
- 线性表之顺序表--类似于java库中的ArrayList
- 测试设计思路
- HDOJ 4089 Activation (概率DP + 迭代)
- The Data scientist's Toolbox -- git&github基础命令
- linux 64位系统的指针为8字节
- CodeForces 625A Guest From the Past
- 操作系统之中断(四)
- [0.2] scala开发环境搭建及第一个应用程序
- Android杂谈之Android数据存储方式
- 数的二进制表示中1的数目
- USACO 1.3 crypt1
- 欢迎使用CSDN-markdown编辑器
- JAVA基础之泛型