Сап двач, дело срочное, в /рr ждать долго Пишу кое-что, тут используются динамические массивы. И возникает такая ошибка. Помогите, пожалуйста, пофиксить
>>249605581 (OP) Нахуй глаза ломать об этот ахуенный код. Юзай валгринд или адрес санитайзер и смотри где и в какой момент происходит выход за пределы буффера.
>>249605581 (OP) i и j местами перепутал во втором блоке у тебя j в третьем уровне вложения только до n может быть, а у тебя он до m бежит, который больше. Плюс утечка памяти т.к. фри надо вызывать не на весь массив один раз, а на каждый указатель полеченый маллоком. За один вызова функции да 120 мегабайт оперативки теряешь.
>>249606103 Нет. У тебя виртуальная память разбита по страницам. Аллоцировал страницу в 4кб он и будет до 4кб идти и записывать в ничью память пока до границ страницы не дойдёт и не засегфолтит
>>249606126 А вот не пизди. kji - оптимальный для производительности вариант итерирования, потому что кеши используются на полную в душе не ебу почему, но да ето так
проблема в том, что мне нужно написать пару динамических массивов, а они не работают при запуске в одном из методов. а если я включаю еще и статический массив, то вообще с ним все перестает работать >>182915447 А не можешь пояснить? Я просто в программировании до недавнего времени ноль, так что не могу понять с чем связано. >> 182915488 Ну как сказать, нужно для пары проектов использовать динамические массивы. Суть в том, чтобы динамически добавлять или удалять элементы в массиве.
>>249606190 Да похуй. Станет погромисткой, устроится в хорошую фирму, будет ебашить по 80 часов в неделю, выгорит, подсядет на наркотики, бросит работу, найдет попроще работу, опустится, станет худенькой бледненькой хикке а тут я ебать.
>>249606030 А в чем сопсна проблема? Или чего-то не понимаю
int main() { int size; cout << "размер массива: "; cin >> size; int *mass = new int [size]; for (int i = 0; i < size; i++) { mass = i; cout << i << mass << endl; } delete [ ] mass; return 0; }
>>249606216 >душе не ебу почему, но да ето так В кэш загружается непрерывный участок памяти, по которому потом и идем. Если идти по столбцам, то в кеше не будет нужных данных и придется лезть в оперативу.
>>249606480 Нет. Не быстрее. Там оптимизация матричных операций. Так такого нет. Там двухмерный массив, а здесь трёхмерный. Там квадратные массивы, а тут прямоугольные. Не пригоден пример. Он не доказывает, что так быстрее.
>>249606467 Потеря не во всей программе, а на каждом вызове функции. Твой комп не сможет эту функцию вызвать 200 раз
>>249606563 Нет. Как маллок через форы на каждый указатель делался так и фри надо вызывать. Причём в обратном порядке. Чтобы сначала самые глубокие буферы очистить, а только в конце трёхэлементный массив
>>249606571 Лучше, но не совсем. Не тот кейс, но эту методику можно применить к кейсу опа. Плюс надо учесть, что вероятно маллок упакует десятиэлементные массивы поближе и тогда вся проблема будет упаковать самый большой массив в кэш. поэтому если сделать kji, то вероятно он заинлайнит 10 обращений и останется только 2 цикла один из которых из миллиона эллементов. Плюс высока вероятность, что первый цикл с тремя итерациями тоже будут заинлайнен и тогда всего один цикл на миллион итераций и 30 обращений останется
Во-первых, пикрил Во-вторых, память таким образом не выделяется для динамических массивов, потому что её вилкой потом чистить приходится. Обычно выделяется огромный кусок памяти: int arr = malloc(pknsizeof(int)) и обращение к нему происходит через макрос, например.
>>249605581 (OP) Я так понимаю, у тебя лабораторная работа и вас заставляют использовать чистые си? Даже в таком случае, если тебе надо выделить блок памяти фиксированной длины, ширины и глубины, то лучше будет выделить единожды блок размером pxmxn и обращаться к нему как [kx(mxn) + ix(m) + j], а еще лучше через какую-нибудь функцию, которая выкинет человекочитаемое исключение, если k,i,j вне нужного диапазона.
>>249607332 >лабораторная работа курсач но не суть и фиксированный массив не подойдёт потому что я к функции буду обращаться с разными размерами массива
>>249607368 однобуферный динамический массив можно с разными размерами создавать. просто вместо обращения a[x][y] будет a[x*n+y]. не всегда удобно, но можно завернуть в функцию, которая ещё а рендж проверит. можно изъебнуться и на псевдо ооп через указатель на функции в структуре сделать контрусктор, диструктор геттер и сеттер.
>>249607368 Так у тебя массив же кубический, я имею ввиду нет смысла выделять каждый раз линии размера m и прямоугольники mxn, если они всё равно одинаковые во всём твоём кубе.
>>249607139 Очень сомневаюсь что в нумпае так делают, там же у массива не может быть элементов разных размеров. Но мне лень проверять это, если честно.
>>249607542 Так там нету произвольной размерности, в том-то и суть. То есть, ты не можешь создать массив, в котором первый элемент размерности 10, второй - 1, а третий (2х5х25) А для быстрого решейпа наоборот, удобнее когда всё одним куском и ты только индексацию меняешь.
>>249607617 У них там решейн, транспонирование, встраивание одной матрицы в другую, конкатинация. в теории может один буфер и лучше, но они через указатель на указатель делали и как я понял у них там на питоне в одном ndarray другой произвольной глубины может быть и в кону одноразмерный на си, а с матрицами сразу двухразмерные на си
такая тема, что если писать нормально, можно обойтись без уродливого цикла выделения и без второго уродливого цикла для освобождения памяти. плюсом, доступ к элемнтам массива стандратным синтаксисом, а не с помощью макросов, блядь, или функций-хелперов, как тут васяны советуют /тхреад
это >>249606901 гавно наверняка пользуется браузером, который написан на Си. и узучает какой-нибудь ЖаваСриптик, который интерпритируется программой, написанной на Си))00))00)))0) говна поешь