在堆栈上声明整数指针,并在堆上分配值

问题描述

使用堆,我有以下内容

int *cnt = malloc(sizeof(int));
cnt[0] = 5;
*cnt = 0;

我要声明一个指针和1个int的malloc空间 我可以通过cnt [0] = 5或* cnt = 0进行赋值。在本示例中,第二个赋值将覆盖第一个赋值

如何使用堆栈呢?

int *cnt = NULL;
 

是否从堆栈中分配了任何内存?如何为cnt分配值? (即整数,而不是地址)

解决方法

如果使用堆栈,则实际上不需要指针。您可以这样做:

int cnt[1];
cnt[0] = 5;
*cnt = 0;

第一个任务被第二个任务覆盖,并且可能会被优化掉。

如果您真的想要一个指针变量,可以改为:

int cnt_var;
int *cnt = &cnt_var;
cnt[0] = 5;
*cnt = 0;

这会占用更多的堆栈空间,因为它同时分配了int变量和int *指针。