C语言中动态内存的分配

动态内存分配:根据需要随时开辟,随时释放的内存分配方式。
分配时机和释放时机完全由程序员决定,由于没有数据声明,这部分空间没有名字。
无法像使用变量或数组那样通过变量名或数组名引用其中的数据,只能通过指针变量来访问。
注意malloc与free一般都是成对出现的只要成功申请的空间使用完后必须要释放,否则会造成内存的泄露。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int sum(int *,int);///函数的声明
 4 int mian()
 5 {
 6     int n,s,i,*p;
 7     scanf("%d",&n);
 8     p=(int *)malloc(n*sizeof(int));///malloc的返回值是void*,与p类型不一致需要强制转换,若不则自动但是会受到警告
 9     if(p==NULL)///动态内存分配失败
10         exit(1);///停止程序的运行
11     for(i=0;i<=n-1;i++)
12         scanf("%d",p+1);///指针变量的输入
13     s=sum(p,n);///调用函数传指针变量
14     printf("%d\n",s);
15     free(p);///释放内存中由malloc()函数分配的空间
16     return 0;
17 }
18 int sum(int *p,int n)
19 {
20     int i,s=0;
21     for(i=0;i<=n-1;i++)
22         s=s+(*p++);
23     return s;
24 }

原文地址:https://www.cnblogs.com/wkfvawl/p/8946643.html

时间: 2024-10-02 22:07:07

C语言中动态内存的分配的相关文章

数据结构基础(1)--数组C语言实现--动态内存分配

数据结构基础(1)--数组C语言实现--动态内存分配 基本思想:数组是最常用的数据结构,在内存中连续存储,可以静态初始化(int a[2]={1,2}),可以动态初始化 malloc(). 难点就是数组在删除或者插入元素的时候,要移动元素的坐标不好确定.规律: 1.如果要在数组中第pos个位置插入一个元素(应该从后面开始移动) for( i=cnu;i>=pos;i--) pBase[i]=pBase[i-1]; 2.删除数组第pos位置的元素 for(i=pos+1;i<=cnu;i--)

《C语言中动态数组的创建及引用》

C语言中动态数组的创建及引用 动态数组是相对于静态数组而言的,静态数组的长度是预定义好的,在整个程序中,一旦给定了数组大小后就无法改变,,而动态数组则不然,它可以根据程序需要重新指定数组的大小.动态数组的内存空间是由堆动态分配的,通过执行代码为其分配储存空间,只有程序执行到分配语句时,才为其分配储存空间. 对于动态数组,其创建比静态数组更麻烦一些,使用完必须由程序员自己释放,否则将引起内存泄漏,但是其使用非常灵活,能根据程序需要动态分配大小,因此相对于静态数组来说,使用动态数组的自由度更大. 对

C语言中关于内存那些事

因为要学IOS开发,为了更好的学习OC所以又从头开始学习C语言,这篇文章主要记录关于C语言中内存布局.以及不同的内存区域的特点. C语言的程序内存布局,从高到低依次为:栈区.堆区.未初始化数据区.初始化数据区.代码区. 一.栈区 由编译器自动管理,无需程序员手工控制.存放函数的参数值.局部变量的值等.栈区内容从高地址到低地址分配,从低地址到高地址存取. int a = 0; int b = 0; int array[5] = {1, 2, 3, 4, 5}; printf("&a....

C 语言中的内存分析

C 语言中的内存分析 一.进制 我们需要了解的4中进制:二进制.八进制.十进制.十六进制 #include <stdio.h> int main() { //默认情况下是十进制 intnumber = 12; //二进制 intnumber2=0b1100; //八进制 intnumber3 = 014; //十六进制 intnumber = 0xc; return0; } Printf以不同进制形式输出的类型: %d 通常以十进制输出一个整数 %o通常以八进制输出一个整数 %x通常以十六进制

R语言中动态安装库

R语言中动态安装库 在一个R脚本中,我们使用了某些library,但是发现运行环境中没有这个library,如果能检测一下有没有这个包,没有就自动安装该多好.而R中非常方便地支持这些,只要联网. 代码如下: site<-"http://cran.r-project.org" if (!require("ggplot2")) { install.package("ggplot2", repos=site) }

c语言中的内存分配malloc、alloca、calloc、malloc、free、realloc、sbr

C语言跟内存分配方式 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. (3)从堆上分配,亦称动态内存分配.程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存.动态内存的

C语言中的编译时分配内存

1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等: 2.堆区(heap) --由程序员分配释放: 3.全局区或静态区 --存放全局变量和静态变量:程序结束时由系统释放,分为全局初始化区和全局未初始化区: 4.字符常量区 --常量字符串放与此,程序结束时由系统释放: 5.程序代码区--存放函数体的二进制代码 例: //main.c int a=0; //全局初始化区 char *p1; //全局未初始化区 void main() { int b; //栈 char

重拾c语言之动态内存分配

动态内存分配 传统数组的缺点: 1数组长度必须事先制定,且仅仅能是长整数不能是变量 2传统形式定义的数组该数组的内存程序无法手动释放 3数组一旦定义,系统就会为该数组分配的存储空间就会一直存在直到该函数执行结束 4数组的长度不能再函数的执行的过程中动态的扩充或者缩小 5不能跨函数使用 为什么须要动态分配内存 动态内存分配内存举例--动态数组的构造 静态内存分配和动态内存分配 跨函数使用内存的问题 #include<stdio.h> void f(void) { int a[5]={0,1,2,

c/c++中动态内存分配处理字符串的细节问题

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> main() { char *p; char *q; p=(char*)malloc(25*sizeof(char)); if(p==NULL) exit(1); //q=(char*)malloc(10*sizeof(char)); //if(q==NULL) exit(1); strcpy(p,&q