malloc保持返回相同的地址

时间:2015-05-30 09:26:03

标签: c pointers

我正在使用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

1 个答案:

答案 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