⑴ c语言,假设我现在准备用malloc函数为一个字符串开辟一个空间
这样弄都行:
char *str=(char*)malloc(20);
或
char *str=(char*)malloc(sizeof(char)*20);
因为sizeof(char)就等于1。
⑵ C语言 malloc()函数 分配内存空间尺寸的问题
这个问题首先得从堆栈说起,一个程序一般分为三段:代码段,数据段(静态数据),和堆栈段。堆栈段存储程序中的变量、程序传递的参数等(动态分配的变量存储在堆中,静态分配的存储在栈中)。堆栈的增长方式如下:
程序在运行的时候会预先分配堆栈空间,所以你的问题中不一定修改了不该修改的地方,有可能那里本来就是空的。
再回到malloc这个函数上来,malloc主要负责分配空间,返回该空间的首地址。那为什么申请空间为0,却可以存储7个字符呢?那是因为C语言的指针中并不检查数组的越界问题,不信的话,你可以这样:char ch[5],然后你去读写ch[6](printf或scanf),这样是不会报错的。但是我们在使用的时候,千万别越界使用,因为这样的程序是非常危险的,试想,如果越界使用的地址正好是一个操作系统的地址,那么你一修改,系统就崩了。同时,C语言的这个机制被黑客广泛地应用与缓冲区溢出攻击,所以你非但不能越界使用指针,还得时刻考虑到指针(数组)是否越界,以加强程序的安全性。
希望对你有所帮助。。。
⑶ C语言 malloc()函数 分配内存空间尺寸的问题
#include
<stdio.h>
#include
<stdlib.h>
int
main()
{
int
*x
=
0;//定义个指针变量,开始不指向任务地方
x
=
(int
*)malloc(sizeof(int));//用malloc申请内存,并让指针x指向申请的内存空间
*x
=
100;//给申请的内存空间赋值
printf("%d\n%x\n",*x,x);//打印出申请的空间的值,后面为x指向的内存地址
free(x);//释放内存,也就到这里
return
0;
}
⑷ 为什么c语言中malloc函数分配的第一个纪录可能多花48个字节
这里需要了解两个概念:malloc分配的内存放置在堆中,堆中内存会存在内存碎片(或不连续性)
举个例子现需要分配100字节内存,而在堆中现在只有60、50、80、70几个块了(只是举例实际内存中不可能是这些值),那要达到100个字节就至少需要两个块,所以大多数实现所分配的存储空间比所要求的要稍大一些,额外的空间用来记录管理信息——分配块的长度,指向下一个分配块的指针等等。
malloc()申请的空间实际就是分了两个不同性质的空间。一个就是用来记录管理信息的空间,另外一个就是可用空间了。
如果想更深入了解建议了解下内存机制还有把malloc函数的源代码下来看下就一目了然了。
⑸ C语言关于堆块用malloc申请空间的问题
你对操作过程可能有所误会。有括号和没有括号的表达式是完全等价的,不会存在有括号的行而没有括号的就不行的问题。你的这两句代码倒确实是有错误的,那就是应该在malloc前加一个强制转换符(double
*)。因为malloc产生的是void
*型指针,要赋给double型的指针的话要强制转换一下,不然是要报错的。
就是说要写成souble
*array=(double
*)malloc(300*300*sizeof(double));才行。
⑹ C语言我malloc后输入一定数量的字符串结果出错为什么
有关realloc的内容自行网络。
realloc使用错误,这里你改成p = realloc(p,i+1);即可。
你可以存入一部分,多了会错误的原因是C语言的典型指针问题。实际上用realloc中你总共只申请了1字节的空间(一直都是1字节),当输入123存入了3个字节,你本身申请的空间不够于是将你申请的空间地址之前的2个字节覆盖了。当覆盖到一定程度,超出了一定限度,机器(计算机)本身会进行检测,发现错误覆盖空间,于是产生错误信号,提示产生段错误。程序停止。
⑺ C语言,怎么用malloc申请一个100000个变量的字符串数组
可以通过以下语句实现:
char *p; //定义指针变量
p = (char *)malloc(100000);//申请空间并赋值给p。
解析:
malloc为内存分配函数,其定义为
void * malloc(size_t size);
功能为申请size大小的内存长度,并返回分配到的地址值。
而字符类型,每个元素占1个字节空间,所以100000个变量的总空间就是100000字节,于是参数size为100000。