- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
#include <stdio.h>
int main(void)
{
int d2[3][3][3];
int i,i2,i3;
for(i = 0; i <= 3; ++i)
for(i2 = 0; i2 <= 3; ++i2)
for(i3 = 0; i3 <= 3; ++i3)
d2[i][i2][i3]=5;
i=0,i2=0,i3=0;
for(i = 0; i <= 3; ++i)
for(i2 = 0; i2 <= 3; ++i2)
for(i3 = 0; i3 <= 3; ++i3)
printf("%d\n",d2[i][i2][i3]);
return 0;
}
играюсь я короче с массивом, этот код компилируется,все печатает но в конце Segmentation fault, почему?
gcc -Wall -Wextra -Werror -Wpedantic -ftrapv -fwrapv -fdiagnostics-show-option -std=gnu11 -o "test" "test.c"
Fike 01.02.2015 01:34 # 0
> отсутствие фигурных скобок
> инициализация кучи переменных в одну строчку без пробелов
> присвоение куче переменных в одну строчку без пробелов
><
pl7ofit 01.02.2015 01:45 # 0
фигурные скобки да, но у меня в блоках по одной строке
да, инициализировать надо было так i=i2=i3=0;
Fike 01.02.2015 03:10 # +1
блядь а
повбивав бы
kegdan 01.02.2015 03:27 # −22
TarasB 02.02.2015 14:16 # +35
bormand 02.02.2015 14:27 # 0
Ваш кэп.
kegdan 02.02.2015 14:51 # −19
Fike 02.02.2015 20:22 # 0
Fike 02.02.2015 20:22 # 0
Fike 01.02.2015 01:36 # +3
pl7ofit 01.02.2015 01:40 # −2
kegdan 01.02.2015 02:32 # −6
defecate-plusplus 01.02.2015 02:49 # +3
скорее, хвосты
pl7ofit 01.02.2015 19:39 # 0
kegdan 01.02.2015 19:59 # −18
Приду - проверю
roman-kashitsyn 02.02.2015 14:41 # +4
roman-kashitsyn 02.02.2015 20:34 # 0
guest 03.02.2015 00:16 # 0
santa_microbe 01.02.2015 07:07 # 0
bormand 01.02.2015 10:35 # +1
Дай я тебя обниму! Хоть кто-то читает предупреждения.
kegdan 01.02.2015 10:46 # −14
roman-kashitsyn 01.02.2015 12:00 # +1
"Компилятор, ну найди мой косяк, ну пожалуйста!"
Кстати, ни splint, ни cppcheck не обнаружили выход за границы.
bormand 01.02.2015 12:11 # +4
А ведь это простейший случай, когда все границы и индексы известны во время компиляции... Что уж говорить о более серьезных проблемах.
roman-kashitsyn 01.02.2015 14:24 # +1
А вот AddressSanitizer проблему в рантайме зарепортил:
Dummy00001 01.02.2015 23:15 # 0
по крайней мере гцц выдает намного больше сообщений при компиляции с оптимизацией чем без нее.
3.14159265 01.02.2015 15:17 # 0
Так ладно влошенность, но он же в самом верхнем цикле выходит за границу.
myaut 01.02.2015 19:10 # 0
pl7ofit 01.02.2015 19:34 # 0
kegdan 01.02.2015 19:56 # −17
roman-kashitsyn 01.02.2015 20:09 # 0
-Werror -Wall - норма жизни, только так и компиляем.
При приступах паранойи компиляют клангом с -Weverything -Werror.
Dummy00001 01.02.2015 23:20 # +1
компилишь - ни одного ворнингра. чекинишь. на след приходят колеги и жалуются что я там за херню вчекинил, ворнинги теперь сыпятся. разница? - компилил в дебаге, они в релизе.
TarasB 03.02.2015 16:48 # +28
bormand 03.02.2015 17:06 # 0
> о поломке стрикт алиасинга в аналоге optional<T>, реализованном через char[sizeof(T)]
Алиасинг между char* и T* допустим стандартом, не пойму, чего он там ругается.
TarasB 03.02.2015 17:08 # +25
Как написать свой аллокатор без реинтерпрет_каста?
TarasB 03.02.2015 17:14 # +32
jni/..\..\units\/container.h: In member function 'tblib::Format& tblib::Format::ArgDig(T, int, int, int) [with const char* pat = ((const char*)((char*)(& pat_flt))), T = float]':
П.С. приходится для спринтф хардкодом выделять буфер на 64 знака, ибо снпринтф в студии-2003 нема.
roman-kashitsyn 03.02.2015 17:32 # 0
TarasB 03.02.2015 17:37 # +27
roman-kashitsyn 03.02.2015 17:46 # 0
Какая у тебя версия компилятора?
Я бы на твоём месте включил -f-no-strict-overflow
bormand 03.02.2015 20:32 # 0
Там есть какая-то похожая функция. sprintf_s() вроде бы.
TarasB 03.02.2015 23:30 # +31
bormand 04.02.2015 00:26 # 0
А вообще - зачем тебе в крестах спринтф?
TarasB 04.02.2015 09:45 # 0
Я покопался в поиске, и мне сказали, что единственный способ перевести число в строку, понимаемый обоими моими компиляторами, не хуячя ифдефы на каждый чих - это спринтф.
bormand 04.02.2015 10:46 # 0
TarasB 04.02.2015 11:24 # 0
"Ты заработал %i очков, а рекорд %i очков, кстати у тебя осталось %i хитпоинтов, и ты на %i уровне" - на стримах охуеешь.
Во-вторых, от лисапедирования перевода числа в строку это не освобождает.
Я тут СТЛ выкинул из сапёра (который под ведроид), так пакет (с 3 бинарниками!) похудел с 650 до 250 килобайт.
bormand 04.02.2015 11:33 # 0
TarasB 04.02.2015 11:56 # 0
> похудел
а ты предлагаешь
> boost::format
не-не-не
defecate-plusplus 04.02.2015 11:59 # +1
фи, зачем, boost::spirit
bormand 04.02.2015 12:46 # 0
defecate-plusplus 04.02.2015 13:07 # 0
но если что, Тарас, в спирите самый быстрый вывод чисел в строку и обратно, задумайся
bormand 04.02.2015 13:13 # 0
Ну да, это очень актуально, ибо Тарас тысячи раз в секунду выводит строки в духе "Ты заработал %i очков, а рекорд %i очков, кстати у тебя осталось %i хитпоинтов, и ты на %i уровне"...
bormand 03.02.2015 21:00 # 0
Он заинлайнил эти Size() и Resize() примерно до вот такого состояния: После чего вспомнил, что знаковое переполнение это UB, и заметил, что если знакового переполнения не возникнет - условие будет всегда true (а если возникнет, то всем похуй, и пусть тоже будет true). Лечить можно, емнип, двумя способами - загнать под ковёр опцией -fno-strict-overflow, либо юзать беззнаковый размер, у которого UB'а при переполнении нет.
TarasB 03.02.2015 23:28 # +24
Какая хуя компилятор сначала мне выдаёт предупреждение? Это его работа - инлайнить и находить то, что можно вырезать, и не надо мне про это сообщать.
bormand 04.02.2015 00:41 # 0
TarasB 04.02.2015 10:03 # 0
Я тут ещё ассерт перед ресайзом вхерачил, что типа вот точно будет новый размер больше старого, не, предупреждение никуда не делось.
bormand 04.02.2015 10:48 # 0
TarasB 04.02.2015 11:25 # 0
Ну пиздец, что это за проверки, которые не обойти ваще никак?
Odin 03.11.2018 17:26 # 0
У меня всего хватит.
roman-kashitsyn 03.02.2015 17:24 # 0
TarasB 03.02.2015 17:34 # +23
..\units/fixed.h:66: warning: dereferencing pointer '<anonymous>' does break strict-aliasing rules
..\units/fixed.h:66: warning: dereferencing pointer '<anonymous>' does break strict-aliasing rules
..\units/tbarr.h:134: note: initialized from here
TarasB 03.02.2015 17:36 # +25
bormand 03.02.2015 21:06 # 0
TarasB 03.02.2015 23:30 # +25
bormand 04.02.2015 00:33 # 0
TarasB 04.02.2015 09:46 # 0
ок, попробую заменить на
&buf[0]
TarasB 04.02.2015 10:02 # 0
bormand 04.02.2015 10:50 # 0
TarasB 04.02.2015 11:39 # 0
jni/..\..\units\/tbdynarr.h:282: warning: dereferencing pointer '<anonymous>' does break strict-aliasing rules
jni/..\..\units\/tbdynarr.h:282: warning: dereferencing pointer '<anonymous>' does break strict-aliasing rules
jni/..\..\units\/tbdynarr.h:282: warning: dereferencing pointer '<anonymous>' does break strict-aliasing rules
jni/..\..\units\/tbarr.h:118: note: initialized from here
TarasB 04.02.2015 12:05 # 0
Это неисправимо: https://bugzilla.redhat.com/show_bug.cgi?id=531483
Как обновить гцц? Мне нужен именно кросс-компилятор, и чтобы плагин его подхватил нормально.
bormand 04.02.2015 12:49 # 0
Кросс-гцц из винды под ARM? Он же из NDK берётся? Хуй знает тогда, я под виндой кросс-гцц никогда не собирал сам...
TarasB 04.02.2015 12:52 # 0
БЛЯ БЛЯ
БЛЯ БЛЯ БЛЯ
БЛЯ БЛЯ БЛЯ БЛЯ
bormand 04.02.2015 13:02 # 0
TarasB 04.02.2015 13:51 # 0
3.14159265 04.02.2015 14:03 # 0
PS> Правда по сравнению со студией 2003 и селероном вполне новая версия.
bormand 04.02.2015 14:11 # +1
> студия 2003
Юзай древнее говно @ ругай кресты.
kegdan 04.02.2015 15:23 # −14
Юзай свежее говно @ ругай себя.
народная мудрость
bormand 04.02.2015 14:14 # 0
GCC 4.4.3: January 21, 2010
5 лет всего, тащемта.
Для сравнения с 2003 студией надо гцц 3.3.х.
MAMOHT 03.12.2018 06:10 # 0
bormand 04.02.2015 14:06 # 0
TarasB 04.02.2015 14:28 # 0
Пришлось срочно откатывать всё нахуй.
Вот такое оно всё коричневое с разработкой под ведро.
roman-kashitsyn 03.02.2015 17:35 # 0
bormand 03.02.2015 20:47 # 0
TarasB 03.02.2015 23:31 # +17
bormand 04.02.2015 00:37 # +7
Там еще какой-то вариант был, когда можно. Но я его не помню, поищи в стандарте.
TarasB 04.02.2015 09:46 # 0
3.14159265 04.02.2015 00:51 # +11
fix_the_clock 04.02.2015 00:59 # +10
wowsuchdoge 02.02.2015 12:14 # 0
вот и всё, нет проблем, няяяя
а, уже ответили, точно же
1024-- 02.02.2015 12:27 # 0
Пробовал задефайнить int, чтобы было вообще ноль символов, но в этом случае либо <cstdio> ломается, либо, если <cstdio> раньше подключать, ломается "int main". Но как задефайнить main, чтобы там был обычный инт, не понял. Разве что, задевайнить уже в теле main, но это не так красиво.
kegdan 02.02.2015 12:50 # −17
если подключить правильную библиотеку
kipar 02.02.2015 12:51 # 0
---
А хотя нет, не поэтому не работает. Так что видимо Си соснул.
1024-- 02.02.2015 12:56 # 0
Кстати, в связи с этим пришло сейчас в голову:
bormand 02.02.2015 12:57 # +1
1024-- 02.02.2015 13:03 # 0
kegdan 02.02.2015 13:13 # −16
http://ideone.com/RWJ0hw
1024-- 02.02.2015 13:15 # 0
kegdan 02.02.2015 13:25 # −12
http://ideone.com/Edd5UV
1024-- 02.02.2015 13:27 # 0
P.S. http://ideone.com/diQTJe. Кто меньше?
lorc 02.02.2015 15:29 # 0
Qwertiy 03.02.2015 17:44 # +2
lorc 03.02.2015 18:00 # +1
kegdan 02.02.2015 12:57 # −12
kegdan 04.02.2015 01:14 # −7