我对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个字节被写入内存中尚未正确分配的某个位置.
它只是因为它没有离开堆栈吗?
有人可以指点我到一个可以找到有关那些东西的启示的地方吗?