int a[10];
上面的代码将创建一个包含四个int变量大小的数组&因此程序将只能存储4个整数。 现在考虑以下命令
int *a,*b,*c,*d;
a= (int *)malloc(sizeof(int));
b= (int *)malloc(sizeof(int));
c= (int *)malloc(sizeof(int));
d= (int *)malloc(sizeof(int));
上面的代码部分将创建四个int类型指针&将分配它们的int大小的内存。 我了解到动态内存分配在朗姆酒时分配内存。 我想知道,无论使用数组还是malloc(动态内存分配),用户将只获得四个int大小的空间来存储。如果我们排除它是一个带有int size memory的指针变量,那么将是什么使用动态内存分配。在这两种情况下,用户将只获得四个int空格&要获得更多,他将需要访问源代码。那么我们为什么要使用malloc或动态内存分配?
答案 0 :(得分:1)
考虑
int a,*b;
cin >> a;
b= (int *)malloc(a*sizeof(int));
用户键入一个号码a
并获取a
整数。程序员或编译器都不知道数字a
。
正如评论中所指出的,这在C ++中仍然是不好的风格,如果可能的话使用std::vector
。即使new
仍然优于malloc
。但我希望(坏)示例有助于澄清动态内存分配背后的基本思想。
答案 1 :(得分:0)
int a[10];
上面的代码行将分配一个10 int
个自动存储持续时间的数组,如果它在本地范围内。
int *a,*b,*c,*d;
但是,上面的内容也将分配4个指针int
自动存储持续时间,同样如果它在本地范围内。
a= (int *)malloc(sizeof(int));
b= (int *)malloc(sizeof(int));
c= (int *)malloc(sizeof(int));
d= (int *)malloc(sizeof(int));
最后,上面将动态地为每个指针分配int
变量。因此,上面的每个指针都将指向一个int
变量。
请注意,与静态内存分配不同,动态分配的内存可以在运行时释放和调整大小。超出范围时释放自动存储持续时间的内存,但无法调整大小。
答案 2 :(得分:0)
你是对的,这只是记忆。但是使用方法存在差异。
在一般情况下,您不一定提前知道所需的内存量,然后知道可以安全释放此类内存的时间。编写malloc
及其朋友,以便他们可以跟踪以这种方式使用的内存。
但在许多特殊情况下,您恰好会提前知道您需要多少内存以及何时需要它。例如,您知道在运行简单循环时需要一个整数作为循环计数器,并且在循环执行完毕后您将完成它。虽然malloc
及其朋友仍然可以在这里为您工作,但局部变量更简单,更不容易出错并且可能更有效。
答案 3 :(得分:-1)
如果您使用C编程,则无需投射malloc
的结果。
我建议你阅读:Do I cast the result of malloc?
然后用4个指针在你的代码中做什么是不必要的;实际上,你可以只用int
分配一个4 malloc
的数组:
int *a;
a = malloc(4 * sizeof(int));