小编Ara*_* D.的帖子

为特定类型分配所需的空间更少?

我对C编程比较陌生,很难理解整个内存分配问题.

让我们说,我这样做:

int *n = malloc(sizeof(char));
// (assuming malloc doesn't return NULL of course)
Run Code Online (Sandbox Code Playgroud)

这提供了指向int的指针,但是我没有为int分配足够的内存.为什么它会起作用呢?我甚至可以明确地将它转换为int,它不会打扰gcc.我知道C编译器非常极简,但即使我为*n赋值,它也不适合char,如:

*n = 300;
Run Code Online (Sandbox Code Playgroud)

......然后打印出来:

printf("%d", *n);
Run Code Online (Sandbox Code Playgroud)

...它工作得非常好,虽然现在最迟我会发现像分段错误这样的错误.

我的意思是,sizeof(char)是1,而sizeof(int)在我的机器上是4.因此,3个字节被写入内存中尚未正确分配的某个位置.

它只是因为它没有离开堆栈吗?

有人可以指点我到一个可以找到有关那些东西的启示的地方吗?

c memory malloc memory-management

5
推荐指数
1
解决办法
86
查看次数

标签 统计

c ×1

malloc ×1

memory ×1

memory-management ×1