LINUX.ORG.RU

40 мегабайт памяти оператором new = ошибка сегментирования.

 


0

1

Вот такой код

int *s = new int(10000000);
	for (int i = 0;i<10000000;i++)s[i]=1;

Задача в занесении простых чисел до 10000000 в массив. Вылетает ошибка сегментирования. Что за странные ограничения? Я был свято уверен, что у меня в распоряжении все мои 3 гига опервативки.


new int[100000000];

Ты выделяешь всего один int с дефолтным значением 100000..

qrck ★★
()

Иногда полезно гуглить маны по инструкциям с неочевидным синтаксисом...

На пальцах: new int(10000000) выделяет один int (4 байта) и инициализирует этот инт числом 10000000. Причина сегфолта очевидна.

Чтобы выделить массив, нужно использовать new int[10000000]

Чтобы удалить масив - delete [] s;

PS. А вообще, не учи C++. Там много доков и их нужно иногда читать.

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

PS. А вообще, не учи C++. Там много доков, и их нужно обязательно внимательно читать, и даже это помогает не всегда.

поправил

shty ★★★★★
()

int *s = new int(10000000);
for (int i = 0;i<10000000;i++)s=1;

vector<int> s( 10000000, 1 );

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

А что же тогда учить?

А это смотря для чего.

AIv ★★★★★
()

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

http://linux.die.net/man/3/malloc

By default, Linux follows an optimistic memory allocation strategy. This means that when malloc() returns non-NULL there is no guarantee that the memory really is available. In case it turns out that the system is out of memory, one or more processes will be killed by the OOM killer.

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

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

Это настраиваемо.

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