当你可以使用指针时,使用malloc有什么意义?

Jin*_*kim -23 c malloc

你不能只使用指针存储尽可能多的数据吗?你为什么要malloc()用来获得更多的记忆?

int * a;
int max, i;
printf("Enter the maximum number you want: ");
scanf("%d", &max);

for (i = 0; i < max; i++)
{
    * (a + i) = i;
}

for (i = 0; i < max; i++)
{
    printf("%d\n", * (a + i));
}
return 0;
Run Code Online (Sandbox Code Playgroud)

所以我让用户选择任何数字,计算机将"分配内存"吧?而不是使用以下代码:

a = (int *) malloc(10 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 8

在你的代码中,

  * (a + i) = i;
Run Code Online (Sandbox Code Playgroud)

是错的,因为你试图写入未初始化的内存.这反过来调用未定义的行为.

详细说明,仅定义指针不会自动为该指针分配无限可访问内存.您需要添加在指针将被定位指向.当您只是定义一个指针(本地)时,它指向一个未知的内存位置,这很可能既不是有效的,也不是程序可以访问的.因此,当您尝试访问该内存位置时,它实际上是访问一些无效的内存.这是UB.

所以,

为什么你必须使用malloc来获得更多内存?

malloc()用于获取更多内存,而不是用于访问所需的内存位置.


编辑:

关于你的编辑,

 a = (int *) malloc(10 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

要添加两件事,

  1. 参阅为什么不投的返回值malloc()在和家人C.
  2. malloc()在使用返回的指针之前,请务必检查是否成功.