我试图理解我的头脑.通过K&R阅读,我来回试图找到它说明我应该动态获取内存块的情况.
例如,我想要一个int指针.
int *pointer;
Run Code Online (Sandbox Code Playgroud)
但随后K&R表示我可能会这样做:
int *pointer;
pointer = (int*)malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)
从本质上讲,我在这里做了哪些不同的事情?在第一种情况下,我创建了一个指针,它还没有指向任何东西,所以我想如果计算机内存不足并且我试着将它指向一个int值我会遇到问题.第二种情况为我的指针保留了空间.所以我不必担心我的程序有多少内存问题.它是否正确?如果这是正确的,我不应该为我创建的每个指针使用malloc(或calloc)吗?只是为了确保我的程序有更少的问题?
malloc
用于分配内存.您可以通过分配指针malloc
或使其指向已分配的内存部分来使用指针.
在您显示的第一种情况下,除非您将指针指向某个地址,否则它不会被分配且无法使用.例如,您可以指向一个退出的int值:
int value = 0;
int* pointer;
pointer = &value;
Run Code Online (Sandbox Code Playgroud)
但是你不能指定它来保存一个值:
int value = 0;
int* pointer;
*pointer = value; // wrong because pointer is not allocated
Run Code Online (Sandbox Code Playgroud)
这是你的第二个案例.
calloc
基本上是malloc
+初始化.
编辑:无论如何,这并不是malloc使用的一个很好的例子.最好的用途可能是您需要分配一个可变大小的数组(在编译时不知道).然后你需要使用:
int* array = (int*)malloc(N * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
这有两个原因:
int array[N];