2

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

#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工作吗?

4

3 回答 3

7

newsamp 的地址没有变化,这并不奇怪。尝试:

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

此外,即使这显然只是一个玩具程序,您也应该在循环终止之前释放内存。

于 2012-04-15T18:46:47.890 回答
5

那是因为您正在打印指针的地址newsamp(!!!!),它是main. 它总是一样的。

您想打印指针本身:

printf("addr: %x\n", newsamp);
于 2012-04-15T18:46:16.320 回答
1

它应该是printf("addr: %x\n", newsamp);

你不应该这样做&newsamp,因为那是指针的地址,而不是它指向的地址。

于 2012-04-15T18:47:02.310 回答