你不能只使用指针存储尽可能多的数据吗?你为什么要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)
在你的代码中,
* (a + i) = i;
Run Code Online (Sandbox Code Playgroud)
是错的,因为你试图写入未初始化的内存.这反过来调用未定义的行为.
详细说明,仅定义指针不会自动为该指针分配无限可访问内存.您需要添加在指针将被定位指向.当您只是定义一个指针(本地)时,它指向一个未知的内存位置,这很可能既不是有效的,也不是程序可以访问的.因此,当您尝试访问该内存位置时,它实际上是访问一些无效的内存.这是UB.
所以,
为什么你必须使用malloc来获得更多内存?
malloc()用于获取更多内存,而不是用于访问所需的内存位置.
编辑:
关于你的编辑,
a = (int *) malloc(10 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
要添加两件事,
malloc()在和家人C.malloc()在使用返回的指针之前,请务必检查是否成功.