If I have understood correctly, it is also important to check that the desired space passed to malloc(), calloc() or realloc() does not exceed the SIZE_MAX constant after the multiplication with the sizeof(desired_type). In order to make sure that does not happen I started to do something like this in my codes:
#define MAX_CHAIN (50)
#ifndef SIZE_MAX
#define SIZE_MAX (~(size_t)0)
#endif
int main(int argc, char const *argv[]){
    char **parsed_string;
    if(MAX_CHAIN > SIZE_MAX/sizeof(char*) || 
    (parsed_string=(char**)malloc(MAX_CHAIN * sizeof(char*)))==NULL){
        printf("%s\n", "Error, cannot allocate memory");
        exit(1);
    }
    /*Otherwise pointer is valid and the execution continues*/
}
So it basically checks for two things:
- That the requested memory is not bigger that SIZE_MAX
- That the pointer returned by malloc() is valid.
My questions are: Is it a correct to do these checks? Is this considered as good practice or should I use something else instead? Also, can someone explain why the allocation is limited by SIZE_MAX?
 
     
    