LINUX.ORG.RU

C + random + array + segfault

 , , ,


0

1
#include <stdio.h>

main() {
    srand(time(NULL));
    int arr[9999999];
    int i;
    for(i=0; i<9999999; i++) {
        arr[i] = rand() % 99999999;
        printf("%d \n", arr[i]);
    }
}

решил откопать книгу по Си. Первый пример, ловлю segfault. Что не так? вывод strace:

execve("./a.out", ["./a.out"], [/* 47 vars */]) = 0
brk(0)                                  = 0x87a1000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7716000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=111260, ...}) = 0
mmap2(NULL, 111260, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb76fa000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0\227\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1790836, ...}) = 0
mmap2(NULL, 1591836, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7575000
mprotect(0xb76f3000, 4096, PROT_NONE)   = 0
mmap2(0xb76f4000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17e) = 0xb76f4000
mmap2(0xb76f7000, 10780, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb76f7000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7574000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb75746c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0xb76f4000, 8192, PROT_READ)   = 0
mprotect(0xb7738000, 4096, PROT_READ)   = 0
munmap(0xb76fa000, 111260)              = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Ошибка сегментирования
ничего не понимаю :)

Deleted

Последнее исправление: CYB3R (всего исправлений: 2)
Ответ на: комментарий от ziemin

Ничё ты не понял... Перевари.

я сделал так: определил в одном хедере переменные и функции (interface) и в c-файле их реализацию(implementation) (тонкость в том, что я определил содержимое этих переменных в interface - но в Си это работает, а в implementation - только функцию). В другом хедере я определил другую функцию(interface), в которой буду использовать переменные из первого хедера, а в втором c-файле подключил хедер этого файла и хедер содержащий объявления тех переменных которые я хочу использовать в этой функции. Затем в главной программе я подключил хедер системный, т.к. все они используют libc-функции, а затем второй хедер, так как он содержит объявления в том числе и первого хедера. Затем при компиляции передал в качестве аргументов компилятору главную программу (ex1.c) и вскомпилировал главный файл ex1 и второй с файл, а затем первый и второй файлы *.c содержащие реализацию хедеров (implementation).

Мне кажется понял, буду переваривать :)

void значит ничего

nil? NULL?

С другой void это супертип, который включает в себя всЁ. Например: что такое 'c'? Это символ. Неважно в какой кодировке... Или (char (void *) &string)

охохо, всё на сегодня видимо. я ничего не понял :)

Deleted
()
Ответ на: комментарий от Deleted

охохо, всё на сегодня видимо. я ничего не понял :)

Всё просто.Только не рассуждай с житейских понятий.

У компилятора машинное представление. Встань на его место, если хочешь понять.

ziemin ★★
()
Ответ на: комментарий от Deleted

охохо, всё на сегодня видимо. я ничего не понял :)

чувак тебе мозги пудрит и запутывает, он сам до конца не понимает что пытается объяснить. Лучше таки осиль прочитать какую-нибудь книжку по си.

mashina ★★★★★
()
Ответ на: комментарий от ziemin

Сильно сказано. Аргументы будут?

Так не очиводно? Как начинаешь что-то объяснять, так сразу скатываешься в какой-то забористый бред. Вот сейчас, например, c void'ом фигню несёшь.

mashina ★★★★★
()
Ответ на: комментарий от Deleted

void значит ничего

nil? NULL?

void значит НИЧЕГО

NULL это указатель, который НИКУДА не указывает.

nil, ЕМНИП это просто пустой объект. Хотя я не в курсе, что это.

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.