变量使用前要先分配空间
来源:互联网 发布:windows 卡在欢迎界面 编辑:程序博客网 时间:2024/06/05 10:02
typedef struct pool_padding_s{ void *head; void *body; void *tail;}pool_padding_t;m = malloc(size);========================pool_padding_t *buffer; //buffer 没有自己的位置、空间buffer->head = m; //head指针没有自己的独立的空间来存放m! 虽然它是指向了别的物理空间buffer->body = (u_char *)m + PADDING_LENGH; //body指针没有自己的独立的空间来存放数据!buffer->tail = (u_char *)m + size - PADDING_LENGH; //The same.u_char *pHead, *pTail;pHead = (u_char *)buffer->head;pTail = (u_char *)buffer->tail;for(int j=0; j<PADDING_LENGH; j++){ //padding}========================pool_padding_t buffer; //OK!buffer.head = m; //OK!buffer.body = (u_char *)m + PADDING_LENGH; //OK!buffer.tail = (u_char *)m + size - PADDING_LENGH; //OK!u_char *pHead, *pTail;pHead = (u_char *)buffer.head;pTail = (u_char *)buffer.tail;for(int j=0; j<PADDING_LENGH; j++){ //padding}.
一个简单的问题:
char* str = "resource";
str[6] = 'k'; //这句报内存写入错误
*(str+6) = 'k'; //这样写同样报错
但是这样就没问题:
char* str = new char[12];
strcpy(str, "resource");
str[6] = k; //没问题
*(str+6) = 'k'; //没问题
这样也没问题:
char str[] = "resource";
str[6] = 'k';
*(str+6) = 'k';
一个比较准确的解答: "resource"是字符串常量。 对于 char *str = "resource"; 把"resource"的值----也就是字符串常量字面值,也就是"resource"的地址,准确来说是起始地址----赋给字符指针 str,Linux下,"resource"字符串常量是存放于只读数据区的,一般来说,32位机器上,在Linux中,堆,全局数据,常量等都是存放于从0x8048000开始的内存地址,向上增长。可以打印一下"resource"的地址来进行验证。char *str = "resource",就是把"resource"的首地址赋给str,所以str 存放的是一个只读数据区的地址,对只读区的数据进行写操作是禁止,具体由相应的操作系统进行判断以及处理。
而对于 char str[] = "resource"; str[]是一个字符数组,编译器首先在栈中分配一定的连续空间用于存放“resource”中的字符以及结尾符,然后把字符串常量的内容,也就是"resource"中的各个字符和结尾符复制到这个栈中的连续空间中。str是数组名,用来表示这个连续栈空间的起始地址,所以str中存放的是栈地址,这个地址的数据是可写的。一般来说,32位机器上,在Linux中,栈地址空间从3G(0xbfffffff)开始向下增长。
- 变量使用前要先分配空间
- 变量分配空间问题
- 使用可恢复空间分配
- 变量空间分配、堆、栈区别
- 变量空间分配、堆、栈区别
- 变量声明/空间分配/未初始化的随机值分配/变量非运算/变量置空
- 全局变量,静态局部变量,局部变量空间的堆分配和栈分配
- 全局变量,静态局部变量,局部变量空间的堆分配和栈分配问题
- 在C51中变量的空间分配几个方法
- heap stack 堆栈 全局变量 静态变量 进程空间 内存分配
- heap stack 堆栈 全局变量 静态变量 进程空间 内存分配
- “指针变量不用分配空间也可以存储数据”
- heap stack 堆栈 全局变量 静态变量 进程空间 内存分配
- synthesize只有一个变量指针 不会分配空间
- PIC关于RAM空间变量的绝对定位及分配
- 指针使用前要分配地址空间
- Linux下使用LVM自由分配空间
- Hi35xx地址空间分配与使用
- Linux修改文件的权限
- CUDA编程中 extern "c"用法解析
- Apache整合Tomcat实现静态资源与动态资源分离
- iOS-计时器
- Android Studio问题集锦
- 变量使用前要先分配空间
- ASP.NET 使用Ajax
- 欢迎使用CSDN-markdown编辑器
- 为Android系统的Application Frameworks层增加硬件访问服务
- vagrant ssh
- java反射机制
- JTable 里的单元格如何使得双击进入单元格后,单元格的内容处于全选中状态
- 线程的引入
- vue.js让双括号{{message}}的内容不随input的值改变