Λοιπόν, κοίταξα πιο επισταμένα τον κώδικά σου γιατί θεώρησα πολύ προφανή την απορία σου και κατάλαβα τι εννοείς τελικά.
Βασικά δεν ρωτάς για το μήκος του array (που όντως είναι sum στο παράδειγμά σου). Είδα πως μέσα στο array βάζεις μονάχα όσα νούμερα διαιρούνται με το 6, άρα αν θεωρήσουμε πως αρχικά το array έχει άδεια στοιχεία, εσύ αναζητάς το πλήθος των γεμάτων στοιχείων του μετά την τοποθέτηση μέσα στο array των αριθμών που διαιρούνται με το 6

Καταρχήν απλοποίησα τον κώδικά σου, τόσο ως λογική σε ορισμένα σημεία όσο και ως ονομασίες μεταβλητών. Τα min, max τα άλλαξα σε low, high και το arraysize το άλλαξα σε maxlen, ενώ εισήγαγα ως σκέτο len αυτό που αναζητάς τελικά (δηλαδή το πλήθος των διαδιχικών κελιών που είναι γεμάτα μετά το for-loop).
- Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>
// ------------------------------------------------------------------------------------
int main( void )
{
int *array=NULL, maxlen=0, len;
int i, low, high;
printf("Hello, World!\nThis program will check numbers between minimum and maximum that are divisible by 6.\n");
printf("Enter number for low limit: ");
scanf("%d", &low);
printf("Enter number for high limit: ");
scanf("%d", &high);
if (high < low) { // swap them
int temp = low;
low = high;
high = temp;
}
maxlen = high - low + 1; // calc maximum length for array
printf("sum (for array): %d\n", maxlen);
array = (int *) malloc( maxlen * sizeof(int)); // create the array dynamically
printf("Array length: %d\n", maxlen );
// put in successive array-cells only those numbers who are divisible by 6
// and count them inside the variable: len
for (len=0, i=0; i < maxlen; i++)
{
if ( (low + i) % 6 == 0 ) {
array[len] = low+i;
printf("Found %d! Added in array as item #%d\n", low + i, len);
len++;
}
}
printf("maxlen = %d, len = %d\n", maxlen, len);
free( array ); // Free memory
array = NULL;
fflush(stdin); getchar();
return 0;
}
Ο παραπάνω κώδικας παράγει ακριβώς το ίδιο αποτέλεσμα με τον δικό σου, σε λιγότερες γραμμές και με λιγότερες εντολές. Το maxlen είναι το μέγιστο μήκος του array και μετά το for-loop το len είναι το πλήθος των γεμάτων και διαδοχικών στοιχείων του array, ξεκινώντας από τη θέση 0.
Πάντως αυτό που ρωτάς, γενικώς μπορεί να γίνει ως εξής:
- Μετά το malloc() αρχικοποιείς όλα τα στοιχεία του array σου με μια τιμή που θα μαρκάρει ως κενό το κάθε κελί. Π.χ. σε αυτή την περίπτωση με έναν αριθμό που ΔΕΝ διαιρείται με το 6, όπως για παράδειγμα το 1 (ο πιο γρήγορος τρόπος να ορίσεις την ίδια τιμή σε μια συνεχόμενη περιοχή μνήμης είναι με τη συνάρτηση: memset() )
- Βάζεις σε διαδοχικές θέσεις μέσα στο array σου ότι θες να βάλεις, ξεκινώντας από τη θέση 0 (στην περίπτωσή μας βάζεις τα νούμερα που διαιρούνται με το 6)
- Φτιάχνεις μια συνάρτηση σαν την παρακάτω, για να την καλείς όποτε θέλεις να βρεις το πλήθος των γεμάτων στοιχείων του array:
- Κώδικας: Επιλογή όλων
int array_len( int array[], int maxlen )
{
int i = 0;
while ( i < maxlen && array[i] != 1 )
i++;
return i;
}