следующий предложенный код:
- иллюстрирует, как должен выполняться блок кода
- указывает, сколько памяти фактически выделяется
- напоминает, чтоКод должен проверять на наличие ошибок
- указывает, как обработать ошибку, если она возникает
и теперь предлагаемый код:
//In this case size will always be 4
int size = countLines(file);
printf("size: %d\n", size);
char*** tripleptr = malloc(sizeof(*tripleptr)*size);
for(int i = 0; i < size; i++)
{
tripleptr[i] = malloc(sizeof(*(tripleptr[i]))*size); // is 16 bytes each iteration, assuming a pointer is 4 bytes
for(int k = 0; k< size; k++)
{
tripleptr[i][k] = malloc(sizeof(*(tripleptr[i][k]))*512); // is 4k bytes each iteration
}
}
Примечание: дляустойчивость:
при вызове любой из функций выделения кучи: malloc()
, realloc()
, calloc()
: всегда проверять (! = NULL) возвращаемое значение, чтобы убедиться, что операция прошла успешно.
В случае неудачи, наберите perror( "my error message" );
, так как это выведет на stderr
, и ваше сообщение об ошибке, и текстовую причину, по которой система считает, что произошла ошибка.И не забудьте передать каждый успешно выделенный указатель кучи памяти на free()
перед выходом