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) 但这也给出了相同的错误
您对空指针使用了错误的格式说明符 (%zu)。这可能会导致未定义的行为。
请使用 (%p):
printf("binData pointer: %p\n", (void *)binData);