真是愚蠢的问题。这是我的示例代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct sample {
int a;
int b;
} SAMPLE_T;
int main() {
int i, max = 4;
for (i = 0; i < max; i++)
{
SAMPLE_T * newsamp = (SAMPLE_T *)malloc(sizeof(SAMPLE_T));
printf("addr: %x\n", &newsamp);
}
}
我正在尝试每次循环时“创建”一个新变量,我认为这样可以解决问题,因为malloc
会在堆上创建一个新变量。但是,似乎我搞砸了一些东西。这是输出:
addr: bfc29c4
addr: bfc29c4
addr: bfc29c4
addr: bfc29c4
我不明白malloc
是如何运作的?
答案 0 :(得分:7)
新闻报道的地址没有变化,这并不奇怪。尝试:
printf("addr: %x\n", newsamp)
此外,即使这显然只是一个玩具程序,你真的应该在循环结束之前释放内存。
答案 1 :(得分:5)
那是因为你要打印指针newsamp
(!!!!)的地址,它是main
堆栈上的一个变量。它总是一样的。
您想要打印指针本身:
printf("addr: %x\n", newsamp);
答案 2 :(得分:1)
应为printf("addr: %x\n", newsamp);
你不应该&newsamp
,因为它取的是指针的地址,而不是它指向的地址。