简体   繁体   中英

Confusion regarding a cast in C

I just wanted to ask what is the difference between

int * a = (int *) malloc(sizeof(int))

and

int * a = malloc(sizeof(int))

because I came across this situation while working on a project, and I tried to create an array as a pointer, and dynamically allocate memory to it. But when I was using int * a = malloc(sizeof(int)) I could not change any of the values of the array, causing a segmentation fault, and when I changed it to int * a =(int *)malloc(sizeof(int)) it all started working fine and dandy. To be more exact this is the code in question:

int i=0;
     for(i=0;i < valCounter;i++){
          if(strcmp(vars[i].name, name) == 0){
               return 2;
          }
     }
     strcpy(vars[valCounter].name, name);
     strcpy(vars[valCounter].type, type);
     i--;
     vars[i].intArrayVal = (int *) malloc((dimension+5) * sizeof(int)); 
     int j=0;
     char currentNumber[1000];
     char elemente[1000];
     int * pointer;
     strcpy(elemente, elements);
     strcpy(currentNumber, strtok (elemente,","));
     vars[i].intArrayVal[j++] = atoi(currentNumber);
     while (currentNumber != NULL && j<=i){
          strcpy(currentNumber, strtok (NULL,","));
          vars[i].intArrayVal[j++] = atoi(currentNumber);
     }
     valCounter++;
     return 0;

Here if I was using the version without the cast it wasn't working properly, and after changing on the fact that I put the cast there it started working as intended.

There is no difference in C language if you cast or not. If you get an error it means that you compile as C++ . C++ is a completely different language and do not use C++ compilers to compile C code

I could not change any of the values of the array, causing a segmentation fault

int * a = malloc(sizeof(int));

You allocate the space for one integer only - the array is only one element long. When you tried to access any element other than a[0] you were accessing the invalid memory location.

If you want to allocate space for more integers you need to:

int * a = malloc(NUMBER_OF_INTEGERS * sizeof(int));

or better

int * a = malloc(NUMBER_OF_INTEGERS * sizeof(*a));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM