cit*_*nas 10 c malloc memory-management
1)
我必须使用malloc为哪些数据类型分配内存?
2)
为什么我可以运行此代码?为什么不崩溃?我假设我需要先为结构分配内存.
#include <stdio.h>
#include <stdlib.h>
typedef unsigned int uint32;
typedef struct
{
int a;
uint32* b;
}
foo;
int main(int argc, char* argv[])
{
foo foo2;
foo2.a = 3;
foo2.b = (uint32*)malloc(sizeof(uint32));
*foo2.b = 123;
}
Run Code Online (Sandbox Code Playgroud)
使用不是更好
foo* foo2 = malloc(sizeof(foo));
Run Code Online (Sandbox Code Playgroud)
3) 如何设置foo.b?是引用随机内存还是NULL?
#include <stdio.h>
#include <stdlib.h>
typedef unsigned int uint32;
typedef struct
{
int a;
uint32* b;
}
foo;
int main(int argc, char* argv[])
{
foo foo2;
foo2.a = 3;
}
Run Code Online (Sandbox Code Playgroud)
小智 18
C中的所有类型都可以动态地,自动地(在堆栈上)或静态地分配.问题不是类型,而是你想要的生命周期 - 当你希望一个对象存在于创建它的函数范围之外时,或者你事先不知道你需要多大的东西时,你可以使用malloc.
编辑以解决您编号的问题.
您必须使用malloc分配数据类型.只有当您希望指针类型指向有效内存时,才必须使用一元&(地址)运算符malloc()或某些相关函数.
您的代码没有任何问题 - 该行:
foo foo2;
Run Code Online (Sandbox Code Playgroud)
在堆栈上分配一个结构 - 然后一切正常.在这个意义上,结构与任何其他变量没有区别.使用自动变量(堆栈分配)或全局变量不是更好或更糟,或者malloc()它们都是不同的,具有不同的语义和选择它们的不同理由.
在#3中的示例中,foo2.b未定义的值.在您显式初始化之前,任何自动变量都有一个未定义和不确定的值.
| 归档时间: |
|
| 查看次数: |
2393 次 |
| 最近记录: |