How to split an array into evenly sized chunks in C

1 Answer

0 votes
#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 
  
*/

 



answered Jan 5, 2025 by avibootz

Related questions

1 answer 120 views
2 answers 152 views
1 answer 118 views
1 answer 124 views
1 answer 122 views
1 answer 110 views
1 answer 117 views
...