online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
/****************************************************************************** Online C Compiler. Code, Compile, Run and Debug C program online. Write your code in this editor and press "Run" button to compile and execute it. *******************************************************************************/ #include <stdio.h> #include <stdlib.h> int ** generate2DBuffer(int dim1, int dim2) { int **ptr; ptr = malloc(dim1* sizeof(int*)); if (ptr != 0) { for (int i = 0; i < dim1; i++) { ptr[i] = malloc(dim2* sizeof(int)); } } int counter = 0; if (ptr != 0) { for (int i = 0; i < dim1; i++) { for (int d = 0; d < dim2; d++) { ptr[i][d] = counter; counter++; } } } return ptr; } void free2DBuffer(int **ptr, int dim1) { for (int i = 0; i < dim1; i++) { int *subarray = ptr[i]; free(subarray); } free(ptr); } int * generateArray(int dim1, int dim2) { int *ptr = malloc(sizeof(int[dim1][dim2])); if (ptr != 0) { for (int i = 0; i < (dim1 *dim2); i++) { ptr[i] = i; } } return ptr; } int main() { int ary[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; int *p1 = ary[0]; //Pointer zum ersten Subarray int *p2 = ary[1]; //Pointer zum zweiten Subarray int(*p3)[3] = ary; //Pointer auf Subarrays der länge 3 int *p4 = &ary[0][0]; //geht auch nutzt aber aus, dass solche Arrays immer ein zusammenhängender Speicherbereich sind for (int i = 0; i < 3; i++) { printf("%d", p1[i]); } printf("\n"); for (int i = 0; i < 3; i++) { printf("%d", p2[i]); } printf("\n"); for (int i = 0; i < 2; i++) { for (int d = 0; d < 3; d++) { printf("%d", p3[i][d]); } } printf("\n"); for (int i = 0; i < 2; i++) { for (int d = 0; d < 3; d++) { printf("%d", ary[i][d]); } } printf("\n"); for (int i = 0; i < (2 *3); i++) { printf("%d", p4[i]); } printf("\n"); int **p5 = generate2DBuffer(2, 4); if (p5 != 0) { for (int i = 0; i < 2; i++) { for (int d = 0; d < 4; d++) { printf("%d", p5[i][d]); //2D Notation eines double pointers } } printf("\n"); int *p6 = &p5[0][0]; for (int i = 0; i < (2 *4); i++) { printf("%d", p6[i]); //Ist nicht ident zu einem 2D Array } free2DBuffer(p5, 2); } printf("\n"); int * intptr = generateArray(2,4); if(intptr != 0) { int (*p7)[4] = (int (*)[4])intptr; //Casting too supress compiler warning for (int i = 0; i < 2; i++) { for (int d = 0; d < 4; d++) { printf("%d", p7[i][d]); //p7 ist ein "echtes" 2D array } } printf("\n"); int *p8 = &p7[0][0]; for (int i = 0; i < (2 *4); i++) { printf("%d", p8[i]); //Daher liefert diese Zeile auch das richtige ergebnis } free(intptr); } printf("\n"); printf("End"); }

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