#include <iostream>
using namespace std;
class Driver {
public:
virtual void transfer() = 0;
virtual ~Driver() {}
};
class SpiDriver : public Driver {
public:
void transfer() override {
cout << "SPI transfer completed" << endl;
}
};
class I2cDriver : public Driver {
public:
void transfer() override {
cout << "I2C transfer completed" << endl;
}
};
Driver* g_driver = nullptr;
void registerDriver(Driver& driver) {
g_driver = &driver;
}
void frameworkRun() {
g_driver->transfer();
}
int main() {
int mode;
cin >> mode;
// Ensure driver lifetime exceeds framework usage
SpiDriver spi;
I2cDriver i2c;
if (mode == 0) {
registerDriver(spi);
} else {
registerDriver(i2c);
}
frameworkRun();
return 0;
}
Explanation & Logic Summary
if blockg_driver pointing to a destroyed object (dangling pointer)This enforces a critical embedded rule:
Borrowed interfaces must never outlive the owning object.
Firmware Relevance & Real-World Context
In real embedded firmware:
This problem trains developers to recognize and fix lifetime-related polymorphism bugs, a core skill in safe embedded C++ design.
Input
0
Expected Output
SPI transfer completed