malloc保持返回相同的地址

问题描述 投票:-2回答:1

我正在使用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,在这里我得到了:

地址:000000000023FCF8地址:000000000023FCF8

打印命令是

printf("Adrress: %p\n",(void*)&etf);
enter code here
c pointers
1个回答
5
投票

您打印指针的代码不正确。

printf("Adrress: %p\n",(void*)&etf)

etf是一个指针,所以&etf会给你指针存储在内存中的地址。这两个电话都是一样的。

你只想打印指针,所以试试:

printf("Address: %p\n",(void*)etf)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.