online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
#include <stdio.h> #include <stdlib.h> #include <math.h> // Define a base class Shape (abstract class) typedef struct { double (*area)(void*); double (*perimeter)(void*); } Shape; // Circle struct and methods typedef struct { Shape base; double radius; } Circle; double circle_area(void* c) { Circle* circle = (Circle*)c; return M_PI * circle->radius * circle->radius; } double circle_perimeter(void* c) { Circle* circle = (Circle*)c; return 2 * M_PI * circle->radius; } Circle* create_circle(double radius) { Circle* circle = (Circle*)malloc(sizeof(Circle)); if (circle == NULL) { perror("Failed to allocate memory for circle"); exit(EXIT_FAILURE); } circle->base.area = circle_area; circle->base.perimeter = circle_perimeter; circle->radius = radius; return circle; } // Square struct and methods typedef struct { Shape base; double side; } Square; double square_area(void* s) { Square* square = (Square*)s; return square->side * square->side; } double square_perimeter(void* s) { Square* square = (Square*)s; return 4 * square->side; } Square* create_square(double side) { Square* square = (Square*)malloc(sizeof(Square)); if (square == NULL) { perror("Failed to allocate memory for square"); exit(EXIT_FAILURE); } square->base.area = square_area; square->base.perimeter = square_perimeter; square->side = side; return square; } // Triangle struct and methods typedef struct { Shape base; double side1; double side2; double side3; } Triangle; double triangle_area(void* t) { Triangle* triangle = (Triangle*)t; double s = (triangle->side1 + triangle->side2 + triangle->side3) / 2.0; return sqrt(s * (s - triangle->side1) * (s - triangle->side2) * (s - triangle->side3)); } double triangle_perimeter(void* t) { Triangle* triangle = (Triangle*)t; return triangle->side1 + triangle->side2 + triangle->side3; } Triangle* create_triangle(double side1, double side2, double side3) { Triangle* triangle = (Triangle*)malloc(sizeof(Triangle)); if (triangle == NULL) { perror("Failed to allocate memory for triangle"); exit(EXIT_FAILURE); } triangle->base.area = triangle_area; triangle->base.perimeter = triangle_perimeter; triangle->side1 = side1; triangle->side2 = side2; triangle->side3 = side3; return triangle; } // Main function int main() { // Create shape objects Circle* circle = create_circle(5.0); Square* square = create_square(4.0); Triangle* triangle = create_triangle(3.0, 4.0, 5.0); // Calculate and print areas and perimeters printf("Circle Area: %.2f, Perimeter: %.2f\n", circle->base.area(circle), circle->base.perimeter(circle)); printf("Square Area: %.2f, Perimeter: %.2f\n", square->base.area(square), square->base.perimeter(square)); printf("Triangle Area: %.2f, Perimeter: %.2f\n", triangle->base.area(triangle), triangle->base.perimeter(triangle)); // Free allocated memory free(circle); free(square); free(triangle); return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue