char *p;
p=malloc(a);
char q[b];
请问通过什么方法 能够 得到 a 和 b呢?
malloc_usable_size 可以得到 大于a的一个数值。除非a=12+(i*7)+ i(这玩意不准没心情仔细列出公式)
但是不能得到 b的值。请问有什么方法可以得到b的值吗?不能用strlen。因为 strlen遇到0就返回了。
linux 指针 所指空间的大小
答案:2 悬赏:20 手机版
解决时间 2021-02-27 04:29
- 提问者网友:末路
- 2021-02-26 06:09
最佳答案
- 五星知识达人网友:三千妖杀
- 2021-02-26 07:25
在程序中,不是使用new申请的内存空间, 不能用delete释放。
编程的时候经常要用到堆内存的分配,通常使用的操作符是new,这个时候就必然要用到delete函数去释放申请的内存空间。
需遵循原则:new和delete的成对出现。只出现一个是错误的或不规范的写法,即时能编译通过,也会有安全隐患;
///
1、在程序中使用malloc分配的空间,可由函数free() 释放该块内存。
例:
char *Ptr = NULL;
Ptr = (char *)malloc(100 * sizeof(char));
// ....
free(Ptr);
Ptr = NULL;
2、使用new 申请的内存空间,可以由delete 释放;(new和delete是成对出现的)
例:
int *a = new int;
// ....
delete a; //释放单个int的空间
注:
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,使用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
编程的时候经常要用到堆内存的分配,通常使用的操作符是new,这个时候就必然要用到delete函数去释放申请的内存空间。
需遵循原则:new和delete的成对出现。只出现一个是错误的或不规范的写法,即时能编译通过,也会有安全隐患;
///
1、在程序中使用malloc分配的空间,可由函数free() 释放该块内存。
例:
char *Ptr = NULL;
Ptr = (char *)malloc(100 * sizeof(char));
// ....
free(Ptr);
Ptr = NULL;
2、使用new 申请的内存空间,可以由delete 释放;(new和delete是成对出现的)
例:
int *a = new int;
// ....
delete a; //释放单个int的空间
注:
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
对于非内部数据类型的对象而言,使用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
全部回答
- 1楼网友:思契十里
- 2021-02-26 07:44
指针可以强制转换.
int *p = "a123";
int size = sizeof(p);
size即你说的. 如果要计算p指向的大小,则使用下面这个
size=sizeof(p)*strlen(p);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯