为什么malloc似乎没有创建新变量?

时间:2012-04-15 18:44:46

标签: c malloc

真是愚蠢的问题。这是我的示例代码:

#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是如何运作的?

3 个答案:

答案 0 :(得分:7)

新闻报道的地址没有变化,这并不奇怪。尝试:

 printf("addr: %x\n", newsamp)

此外,即使这显然只是一个玩具程序,你真的应该在循环结束之前释放内存。

答案 1 :(得分:5)

那是因为你要打印指针newsamp(!!!!)的地址,它是main堆栈上的一个变量。它总是一样的。

您想要打印指针本身:

printf("addr: %x\n", newsamp);

答案 2 :(得分:1)

应为printf("addr: %x\n", newsamp);

你不应该&newsamp,因为它取的是指针的地址,而不是它指向的地址。