C 内存访问错误分段故障 -

问题描述 投票:0回答:1
uint32_t binDataSize = 0;  
void  *binData =Snapshot_Recovery(argc, argv, &binDataSize);

snapshot_header *snapPtr = (snapshot_header *)malloc(binDataSize);
printf("bindataSize is %u\n", binDataSize);
printf("Size of binData: %zu bytes\n", binData);

snapPtr = (snapshot_header *)binData;
printf("Transaction Code: %d\n", snapPtr->trans_code);

运行此或以下命令时会出现分段错误核心转储错误

uint32_t binDataSize = 0;
        void  *binData =Snapshot_Recovery(argc, argv, &binDataSize);

        snapshot_header *snapPtr = (snapshot_header *)binData;
        printf("bindataSize is %u\n", binDataSize);
        printf("Size of binData: %zu bytes\n", binData);

        if(snapPtr != NULL){
                 printf("Transaction Code: %d\n", snapPtr->trans_code);
        }else{
                printf("snapPtr is NULL");
        }

出现分段错误

bindataSize is 10747006
Size of binData: 1763438762 bytes
Segmentation fault (core dumped)

我知道由于内存使用不当而发生分段错误,但我找不到哪里出了问题

typedef struct __attribute__((packed)) {
        int16_t trans_code;
        int32_t size;
        int32_t no_of_records;
        int32_t lsn;
        int16_t stream_id;
}snapshot_header;

我正在打印 binDataSize 和 binData 以便与它的实际值匹配,并且它匹配。

我尝试将原始值与 Snapshot_Recovery 的返回值和值进行匹配 每次都匹配。我尝试使用 memcpy(snapPtr, binData, binDataSize) 但这也给出了相同的错误

c pointers memory-management segmentation-fault runtime-error
1个回答
0
投票

您对空指针使用了错误的格式说明符 (%zu)。这可能会导致未定义的行为。

请使用 (%p):

printf("binData pointer: %p\n", (void *)binData);
© www.soinside.com 2019 - 2024. All rights reserved.