malloc()函数比数组有什么优势以及缺点

malloc()函数比数组有什么优势.

悬赏分:0 - 解决时间:2009-8-17 12:54
malloc()函数比数组有什么优势,比如说:我声明一个可以存储100个字符的内存块和声明一个可以存储100个字符的数组,我觉的malloc()并没有比数组占优势.大家可以打个例子来体现malloc()比数组更占优势.谢谢. 
问题补充:
你们也说,既然我用多少就分配多少,那我不是知道我要用多少,我直接定义数组为我想要用多少的数量不就行了.
或者是我说错了.大家看这样的一个例.p = ( int* )malloc( 100 * sizeof ( int ) );像这样.我不也是用100个int型变量.请大家再次说清楚的.谢谢了.分不是问题.只要我懂.一些好说.
#include <stdlib.h>

int main(void)
{
 int a[100]; /*内存在栈上*/
 int *c1, *c2, *c3;

 c1 = (int *)malloc(sizeof(int)* 100);/*内存在堆上*/
 c2 = (int *)malloc(sizeof(int)* 100);/*内存在堆上*/
 c3 = (int *)malloc(sizeof(int)* 100);/*内存在堆上*/


 free(c1);
 free(c2);
 free(c3);
}

栈上空间是有限的,堆上可分配空间要比栈上大 

如果栈上空间不够了,只能用堆上空间
堆上空间就必需要通过malloc来分配了

这样说是不是就明白了 
///
大家讨论:在gcc中使用malloc() 和 free(),取代一些数组操作,有何优缺点? 
记得我以前说过经常这样用,被坛子里的一位大侠批评:将会死得很难看!
这样用到底有什么弊端呢?
请大家讨论或高人出来指教
在某些情况下必须这样用才行,要注意的就是不要让程序有漏洞而没把申请的空间释放掉。 
没有释放的后果自然就会导致RAM溢出程序跑飞。自己去分配内存就是要解决这个问题。
之前写FAT函数就用这两个函数,不然没办法操作。
如果程序RAM足够用,最好不用这两个函数。让编译器去解决内存分配问题总比你自己去分配好。
另外在AVRstudio里调试,申请出来的数组看不到它的内容。
在多处调用MALLOC()和FREE()会形成内存碎片。到最后想申请大内存空间时会失败。 
在函数中,malloc() 这个函数,空间是在堆上分配的,函数返回不释放,需要用 free()来释放; 
在函数中,定义数组,空间是在栈上分配的,函数执行完毕返回,自动释放。
所以感觉用数组更安全一些。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 C 语言中,可以使用以下方法来新建一个大小为 10 个整型的指针数组,而不使用 malloc 函数: 1. 在函数内部声明一个指针数组,并分配一个固定的数组大小。 ``` int *arr[10]; ``` 2. 在全局作用域声明一个指针数组,并分配一个固定的数组大小。 ``` int *arr[10]; ``` 3. 使用宏来声明一个指针数组,并分配一个固定的数组大小。 ``` #define N 10 int *arr[N]; ``` 注意:上述方法只能声明一个指针数组,并不能为数组中的每个元素分配内存。如果需要为每个数组元素分配内存,还需要使用 malloc 或其他内存分配函数。 例如,可以使用以下代码为数组中的每个元素分配内存: ``` for (int i = 0; i < 10; i++) { arr[i] = malloc(sizeof(int)); } ``` 还可以使用以下代码为数组中的每个元素分配内存: ``` for (int i = 0; i < 10; i++) { *(arr + i) = malloc(sizeof(int)); } ``` 此外,还可以使用 calloc 函数来为数组中的每个元素分配内存,并将内存初始化为 0: ``` for (int i = 0; i < 10; i++) { arr[i] = calloc(1, sizeof(int)); } ``` ### 回答2: 在C语言中,我们可以使用静态分配的方法来创建一个大小为10的整型指针数组,而不使用malloc函数。 具体步骤如下: 1. 声明一个整型指针数组数组大小为10:int *ptrArr[10]; 2. 声明10个整型变量:int num1, num2, num3, num4, num5, num6, num7, num8, num9, num10; 3. 将每个整型变量的地址赋值给指针数组的对应位置,即将变量的地址存储到指针数组的元素中: ptrArr[0] = &num1; ptrArr[1] = &num2; ptrArr[2] = &num3; ptrArr[3] = &num4; ptrArr[4] = &num5; ptrArr[5] = &num6; ptrArr[6] = &num7; ptrArr[7] = &num8; ptrArr[8] = &num9; ptrArr[9] = &num10; 通过这种方法,我们可以创建一个大小为10的整型指针数组,并且不使用malloc函数。这样做的好处是不需要动态内存分配,减少了内存管理的复杂性,但是缺点数组大小是固定的,无法动态调整。 ### 回答3: 在C语言中,可以使用静态数组来创建一个大小为10个整型的指针数组,而不使用malloc函数来动态分配内存。静态数组的大小是在编译时确定的,因此不需要malloc函数来分配内存。下面是一个示例代码: ```c #include <stdio.h> int main() { int* ptrArray[10]; // 创建一个大小为10的整型指针数组 int a = 1, b = 2, c = 3; // 假设有3个整数需要被指针数组指向 ptrArray[0] = &a; ptrArray[1] = &b; ptrArray[2] = &c; // 继续添加其他整数的指针到数组中... // 访问指针数组中的元素 for (int i = 0; i < 10; i++) { if (ptrArray[i] != NULL) { printf("指针数组中的元素 %d 的值为:%d\n", i, *(ptrArray[i])); } } return 0; } ``` 在上述代码中,我们声明一个指针数组`ptrArray`,其大小为10个整型指针。然后,我们可以将具体整数的地址赋值给数组的元素,从而使数组的元素成为指向这些整数的指针。这样,我们就利用了静态数组存储一组指针而不用使用malloc函数进行动态分配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值