内存的动态分配
2013-08-24 20:08
141 查看
void *malloc(unsigned int)函数包含在<stdlib.h>头文件中,void * //泛型指针,其返回值为指针可以付给任何类型
malloc(1000); malloc ( n ); (float *)malloc(n*sizeof(float)); (int *)malloc(n*sizeof( int ));等等都代表开辟了一个内存空间
将该空间的首地址赋予指针,注意其类型一致例如:
char *p;
p= (char *)malloc(n*sizeof(char));
/*void *malloc(unsigned int)
void * //泛型指针,其返回值为指针可以付给任何类型
int main(void)
{
char *p=malloc(1000); //开辟的堆空间
p[0]; //所开辟空间的第一个字节
p[1]; //第二个字节
int *q=malloc(1000);
q[0]; //100z字节的前四个字节
q[1]; //第五至第八字节
}
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char *p=malloc(1000);
if(p == NULL) //相当于 if(!p)
perror("malloc");
exit(-1); //
free(p); //将开辟堆对空间释放,该空间可以再次被申请
return 0;
}
//编译系统会根据变量的声明来开辟内存空间
栈空间 静态内存分配 其大小编译时决定
堆空间 动态内存分配 其大小运行时决定
动态 静态
大小运行是2决定 大小编译时决定
程序员分配 编译器分配
手动释放 自动释放*/
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i=0,n;
while(i++<100)
{
char *p;
scanf("%d",&n);
p=malloc(n+1);//在程序运行中可以随时调整空间的大小
if(p == NULL)
{
perror("malloc");
exit(-1);
}
scanf("%s",p);
printf("%s\n",p);
free(p); //一次开辟利用结束后立即释放,
}
return 0;
}
******************************************************
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i=0,n;
while(i++<100)
{
scanf("%d",&n);
char *p;
p= (char *)malloc(n*sizeof(char));
if(!p)
{
perror("malloc");
exit(-1);
}
scanf("%s",p);
printf("%s\n",p);
free(p);
}
return 0;
}
================================================
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i=0,n;
while(i++<100)
{
char *p; //此句和下一句调换位置则不能编译,,真心不懂
scanf("%d",&n);
p=(char *)malloc(n*sizeof(char));
if(p==NULL)
{
perror("malloc");
exit(-1);
}
scanf("%s",p);
printf("%s\n",p);
free(p);
}
return 0;
}
malloc(1000); malloc ( n ); (float *)malloc(n*sizeof(float)); (int *)malloc(n*sizeof( int ));等等都代表开辟了一个内存空间
将该空间的首地址赋予指针,注意其类型一致例如:
char *p;
p= (char *)malloc(n*sizeof(char));
/*void *malloc(unsigned int)
void * //泛型指针,其返回值为指针可以付给任何类型
int main(void)
{
char *p=malloc(1000); //开辟的堆空间
p[0]; //所开辟空间的第一个字节
p[1]; //第二个字节
int *q=malloc(1000);
q[0]; //100z字节的前四个字节
q[1]; //第五至第八字节
}
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
char *p=malloc(1000);
if(p == NULL) //相当于 if(!p)
perror("malloc");
exit(-1); //
free(p); //将开辟堆对空间释放,该空间可以再次被申请
return 0;
}
//编译系统会根据变量的声明来开辟内存空间
栈空间 静态内存分配 其大小编译时决定
堆空间 动态内存分配 其大小运行时决定
动态 静态
大小运行是2决定 大小编译时决定
程序员分配 编译器分配
手动释放 自动释放*/
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i=0,n;
while(i++<100)
{
char *p;
scanf("%d",&n);
p=malloc(n+1);//在程序运行中可以随时调整空间的大小
if(p == NULL)
{
perror("malloc");
exit(-1);
}
scanf("%s",p);
printf("%s\n",p);
free(p); //一次开辟利用结束后立即释放,
}
return 0;
}
******************************************************
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i=0,n;
while(i++<100)
{
scanf("%d",&n);
char *p;
p= (char *)malloc(n*sizeof(char));
if(!p)
{
perror("malloc");
exit(-1);
}
scanf("%s",p);
printf("%s\n",p);
free(p);
}
return 0;
}
================================================
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i=0,n;
while(i++<100)
{
char *p; //此句和下一句调换位置则不能编译,,真心不懂
scanf("%d",&n);
p=(char *)malloc(n*sizeof(char));
if(p==NULL)
{
perror("malloc");
exit(-1);
}
scanf("%s",p);
printf("%s\n",p);
free(p);
}
return 0;
}
相关文章推荐
- 智能指针的模板,用来管理动态分配的内存
- c++ 基类、派生类都使用了动态内存分配的实例
- 链表的C语言实现(含动态内存分配)
- C动态内存分配几个细节
- 动态内存分配到底为谁分配内存空间
- 动态内存分配:如何将两个字符串连接成单个字符串
- 嵌入式操作系统分析(六):浅析动态内存分配及Malloc/free的实现
- c++动态内存分配(new/new[]和delete/delete[])
- 用户申请内存的动态分配
- C++用new动态分配数组内存后用()进行初始化
- C++ 中继承与动态内存分配的详解
- c语音动态内存分配,内存重新分配,内存释放,指针运算
- C++动态内存分配---两级allocator设计与实现(二)
- C++动态内存分配(堆)
- C和C++中动态分配和释放内存的方式及其区别
- 动态内存分配和指针
- 由动态分配和静态分配的数据在内存组成区别
- C和C++如何动态分配和释放内存,他们的区别是什么
- Windows下动态内存分配方式
- 数据结构基础——指针及动态内存分配(malloc)