我正在使用malloc
来创建结构。当我尝试在main中创建结构时,malloc
返回两个不同的指针,但是当我在函数内部执行相同操作时,malloc
会返回相同的指针两次。
这是我的代码:
typedef struct etf_t{
int number;
char* symbol;
float initialPrice;
List stocks;
}*Etf;
Etf etfCreate(int number, char* name){
if (name == NULL || number <= 0){
return NULL;
}
Etf etf = malloc(sizeof(*etf));
if (etf == NULL){
return NULL;
}
etf->stocks = listCreate(stockCopy, stockDestroy);
if (etf->stocks == NULL){
free(etf);
return NULL;
}
etf->number = number;
etf->symbol = copyString(name);
etf->initialPrice=0;
return etf;
}
在函数内部我将其称为:
Etf etf=etfCreate(etfID,etfName);
然后将其插入Map(通过指针)。
我没有在代码中的任何地方销毁etf
,所以我不知道为什么malloc
在下一个函数调用中使用相同的地址。
编辑: 我在malloc之后添加了printf,在这里我得到了什么:
Adrress:000000000023FCF8 地址:000000000023FCF8
打印命令是
printf("Adrress: %p\n",(void*)&etf);
enter code here
答案 0 :(得分:5)
您打印指针的代码不正确。
INSERT INTO Purchase_Deliveries_Items
(ID,Item_ID)
SELECT (
SELECT MAX(ID) -- same MAX ID for all
FROM Purchase_Deliveries_Items
) + ROW_NUMBER() OVER (ORDER BY any_column),
Item_ID,
FROM Purchase_Orders_Items
WHERE PurchaseOrder_ID = 1
printf("Adrress: %p\n",(void*)&etf)
是一个指针,因此etf
为您提供指针存储在内存中的地址。这两个电话都是一样的。
您只想打印指针,请尝试:
&etf