C语言申请内存?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言申请内存?相关的知识,希望对你有一定的参考价值。

我想知道这句申请内存的语句的意思怎么用?是什么意思?
int *p,n;
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);

但在某些时候,我们需要的数组的长度是无法预先确定的,要解决这样的限制,需要使用动态数组。动态数组是相对于静态数组而言。动态数组的内存空间是从堆(heap)上分配的,是在执行代码过程中分配的,当程序执行到这些语句时,才为其分配。注意,程序员自己负责释放内存。
1
2
#include<stdio.h>
#include<stdlib.h>

int main(int arcv, char * argv[])

int arrLen;
char *array;

char c;
int i;

printf("please set the size of the len:\n");
scanf("%d", &arrLen);

array = (char *)malloc(arrLen*sizeof(char));
if(array == NULL)

printf("malloc fail\n");
return -1;


for(i = 0; i < arrLen;i++)

c = getchar();
array[i] =c;//*array++ =c;


for( i = 0; i < arrLen; i++)

printf("this array is %c\n", array[i]);


free(array);
return 0;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
mallco和free成对出现,在用完申请的内存之后及时释放,否则会造成内存泄漏。
我们在一些项目中经常出现内存泄漏
参考技术A 如果c语言申请,但是它的内存的话可以清理掉,然后再重新的申请。 参考技术B #include
<stdio.h>
#include
<malloc.h>
void
main()
int
a=10;
int
p*;//定义了一个整数类型的指针
p=malloc(sizeof(int)*a);//分配40个字节的内存空间
*p=5;
*(p+1)=6;
//将分配的内存空间的前两个整数赋值为5和6
free(p);
//使用完之后释放内存空间
参考技术C 语言申请内存就是把语句说的清楚呃,游离让别人能听出来他这个什么意思?不能胡说乱说。 参考技术D 在C语言中,使用malloc函数来申请内存。函数原型如下:

#include<stdlib.h>

void *malloc(size_t size);

参数size代表需要动态申请的内存的字节数,若内存申请成功,函数返回申请到的内存的起始地址,若申请失败,返回NULL, 在使用该函数时应注意以下几点

1.只关心申请内存的大小,该函数的参数很简单,只有申请内存的大小,单位是字节

2.申请的是一块连续的内存,该函数一定是申请一块连续的区间,可能申请到内存比实际申请的大,但也有可能申请不到,若申请失败,则返回NULL

3.返回值类型是void*,函数的返回值是void*,不是某种具体类型的指针,可以理解成该函数只是申请内存,对在内存中存储什么类型的数据,没有要求,因此,返回值是void*,实际编程中,根据实际情况将void*转换成需要的指针类型

4.显示初始化,注意:堆区是不会自动在分配时做初始化的(包括清零),所以程序中需要显示的初始化

以上是关于C语言申请内存?的主要内容,如果未能解决你的问题,请参考以下文章

C语言动态内存管理

转:C语言申请内存时堆栈大小限制

win10读文件时C语言申请内存空间最大能申请多少个

C语言之内存空间

C语言中内存管理规范

C语言复习之字符指针(迭代内存申请等操作)