Как предположил г-н Шикаданс, perror () должно помочь отследить, почему malloc () не работает. Этот код демонстрирует использование:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N_ARRAYS 2
int main (int argc, char **argv)
{
char * my_arrays[N_ARRAYS];
size_t nbytes = 1024;
int i;
if (argc>1) {
nbytes = atoi(argv[1]);
if (nbytes == 0) {
fprintf(stderr, "Parse error for input \"%s\"\n", argv[1]);
exit(EXIT_FAILURE);
}
}
for (i=0; i<N_ARRAYS; i++) {
my_arrays[i] = malloc(nbytes);
if (!my_arrays[i]) {
perror("malloc");
exit(EXIT_FAILURE);
} else {
printf("[%i] Successfully allocated %i bytes on the heap\n", i, nbytes);
}
}
return 0;
}
Вы можете передать количество байтов для выделения как argv [1].
На моем компьютере с Linux я могу выделить до 2 ГБ для процесса, что является размером виртуального адресного пространства по умолчанию на моей машине. Если я попытаюсь превысить этот предел, malloc () завершится неудачно, и perror () скажет мне, почему:
# Allocate two 1024MB arrays
tom@gibbon:~/src/junk/stackoverflow$ ./a.out $((1024*1024*1024))
[0] Successfully allocated 1073741824 bytes on the heap
[1] Successfully allocated 1073741824 bytes on the heap
# Allocate two 1500MB arrays
tom@gibbon:~/src/junk/stackoverflow$ ./a.out $((1500*1024*1024))
[0] Successfully allocated 1572864000 bytes on the heap
malloc: Cannot allocate memory