Hello everyone!! I have a problem about memory allocation, i use calloc() to initialize all elements in array to be zero.

This is my code:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

#define sizes 1200



 main()
{
    double** arr;
    int m[sizes];
    int i,j,k;

    srand((unsigned)time(NULL));

    arr= (double **) calloc(sizes,sizeof(double*));
    for(k=0; k< sizes; k++){
    arr[k]=(double*)calloc(sizes,sizeof(double));
    }

    for(j=0; j< sizes; j++){        
        m[j]= 0;
        while(m[j] <30){
            i= (int) rand()%1200;
            if (arr[i][j] == 0.0) {
                arr[i][j]= (double) rand()/RAND_MAX;
                if(arr[i][j] > 0){
                    m[j]++;
                    printf("arr[%d][%d] = %lft", i, j, arr[i][j]);
                    printf("n");
                }
            }
        }
    }
    // FREEING MEMORY        
//  for (k = 0; k<sizes; i++)    {        
//      free(arr[k]);        
//  }   
    free(arr);  

    getch();

}

My problem is the result of this code was show only some data not the hold data. Could anyone plz help me what's wrong with my code?

Thanks in advance!

Recommended Answers

All 6 Replies

Not sure what you are trying to accomplish with that code, but the reason that you don't see all the data is probably due to those two if conditions. Remove them and just set each element to some random number.

for(i = 0; i < sizes; i++)
{
    for(j = 0; j < sizes; j++)
        arr[i][j] = rand();
}

Thanks for your reply sir, i can't do like you suggest because i don't want to random the hold elament of columns but i want to random with the fix m[j] . Do you have any other way to slove this problem?

delete this if statement: if(arr[i][j] > 0){

and this one: if(arr[i][j] > 0){

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

#define sizes 1200



 main()
{
    double** arr;
    int m[sizes];
    int i,j,k;

    srand((unsigned)time(NULL));

    arr= (double **) calloc(sizes,sizeof(double*));
    for(k=0; k< sizes; k++){
    arr[k]=(double*)calloc(sizes,sizeof(double));
    }

    for(j=0; j< sizes; j++){        

        for(m[j] = 0; m[j] <30, m[j]++){
            i= (int) rand()%1200;
            arr[i][j]= (double) rand()/RAND_MAX
            printf("arr[%d][%d] = %lft", i, j, arr[i][j]);
            printf("n");
        }
    }
    // FREEING MEMORY        
  for (k = 0; k<sizes; i++)    {        
      free(arr[k]);        

  }   
    free(arr);  

    getch();

}

I got the same result sir :(

It is showing you all the rows/columns that it populates. If you display them all then you will see that there are lots of cells that were not populated. Print them to a text file instead of on the screen so that you can easily see what cells were or were not populated.

ok, Thanks for your help sir.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.