#include <stdio.h>
#include <stdlib.h> // malloc / free
#include <string.h> // memcpy
void splitArray(int *array, int arraySize, int chunkSize, int ***chunks, int *numChunks) {
*numChunks = (arraySize + chunkSize - 1) / chunkSize;
// Allocate memory for an array of chunk pointers
*chunks = (int **)malloc(*numChunks * sizeof(int *));
for (int i = 0; i < *numChunks; i++) {
int currentChunkSize = (i == *numChunks - 1) ? (arraySize - i * chunkSize) : chunkSize;
// Allocate memory for each chunk
(*chunks)[i] = (int *)malloc(currentChunkSize * sizeof(int));
// Copy array elements to chunk
memcpy((*chunks)[i], array + i * chunkSize, currentChunkSize * sizeof(int));
}
}
void freeChunks(int **chunks, int numChunks) {
for (int i = 0; i < numChunks; i++) {
free(chunks[i]); // Free each chunk
}
free(chunks); // Free the array of chunk pointers
}
int main() {
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int arraySize = sizeof(array) / sizeof(array[0]);
int chunkSize = 3;
int **chunks;
int numChunks;
splitArray(array, arraySize, chunkSize, &chunks, &numChunks);
for (int i = 0; i < numChunks; i++) {
int currentChunkSize = (i == numChunks - 1) ? (arraySize - i * chunkSize) : chunkSize;
printf("Chunk %d: ", i);
for (int j = 0; j < currentChunkSize; j++) {
printf("%d ", chunks[i][j]);
}
printf("\n");
}
freeChunks(chunks, numChunks);
return 0;
}
/*
Chunk 0: 1 2 3
Chunk 1: 4 5 6
Chunk 2: 7 8 9
*/