Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Kant

Программирование ver 4.1

Рекомендованные сообщения

(изменено)

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

Будет ошибка во время выполнения, если адрес по смещению mas+3 не будет принадлежать программе. Но он спокойно может принадлежать программе и тебе просто выдастся какое-то левое число, которое ты никогда не видел.

 

добро пожаловать в мир указателей.

 

Я правильно понял что я выделяю память из кучи, а когда я записываю mas[0][3] Значение 2, то фактически какой-то рандомный кусок из кучи заменяется этим значением


Изменено пользователем P0JIT0H

Поделиться сообщением


Ссылка на сообщение

в общем то да.

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

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

 

Ну и кусок кучи в общем то не рандомный, адрес ведь у тебя есть, правда лежит там что-то неведомое.


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

в общем то да.

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

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

 

Ну и кусок кучи в общем то не рандомный, адрес ведь у тебя есть, правда лежит там что-то неведомое.

спасибо огромное

Поделиться сообщением


Ссылка на сообщение

дропнул друзей и родню сел кодить и кодил пока не взяли на работу. Теперь очень доволен. Не здавайтесь

Поделиться сообщением


Ссылка на сообщение
Гость 2poy_nyasha

дропнул друзей и родню сел кодить и кодил пока не взяли на работу. Теперь очень доволен. Не здавайтесь

ни друзей, ни родных, ни личной жизни

 

 

да ну нахуй такую жизнь

Поделиться сообщением


Ссылка на сообщение

Я правильно понял что я выделяю память из кучи, а когда я записываю mas[0][3] Значение 2, то фактически какой-то рандомный кусок из кучи заменяется этим значением

ты не выделяешь память. у тебя есть указатель типа инт на элемент mas[0][0], который ты получил, когда выделил память во второй раз. и по сути то, что ты делаешь - это указатель + 3.

в следующий раз на месте этого элемента может быть что-то другое


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

Я правильно понял что я выделяю память из кучи, а когда я записываю mas[0][3] Значение 2, то фактически какой-то рандомный кусок из кучи заменяется этим значением

ты не выделяешь память. у тебя есть указатель типа инт на элемент mas[0][0], который ты получил, когда выделил память во второй раз. и по сути то, что ты делаешь - это указатель + 3.

в следующий раз на месте этого элемента может быть что-то другое

Да, я это понял

 

ах да ещё вопрос

mas[0] = new int [1]; тут я

1)как бы выделяю память на ещё 1 элемент

или

2)я указываю что память выделяемая всего на 1 элемент

То есть в 1 случае я могу mas[0] = new int [1]; написать ещё раз и тогда память выделется ещё под 1 элемент, или же mas[0] = new int [1]; второй раз ничего не даст?

Поделиться сообщением


Ссылка на сообщение
Гость 2poy_nyasha

Я правильно понял что я выделяю память из кучи, а когда я записываю mas[0][3] Значение 2, то фактически какой-то рандомный кусок из кучи заменяется этим значением

ты не выделяешь память. у тебя есть указатель типа инт на элемент mas[0][0], который ты получил, когда выделил память во второй раз. и по сути то, что ты делаешь - это указатель + 3.

в следующий раз на месте этого элемента может быть что-то другое

Да, я это понял

 

ах да ещё вопрос

mas[0] = new int [1]; тут я

1)как бы выделяю память на ещё 1 элемент

или

2)я указываю что память выделяемая всего на 1 элемент

То есть в 1 случае я могу mas[0] = new int [1]; написать ещё раз и тогда память выделется ещё под 1 элемент, или же mas[0] = new int [1]; второй раз ничего не даст?

да хуй знает

 

чо ты меня спрашиваешь ваще?

 

я ебал в рот работу с памятью, это обязанность ОС

Поделиться сообщением


Ссылка на сообщение
(изменено)

int **mas - двойной указатель на инт

 

mas[0], mas[1], mas[2] - один раз разименовали указатель, получили одинарные указатели на инт

 

mas[0][0] - сам инт, который лежит по указателю, разименованному уже два раза

 

new возвращает указатель на выделенный участок памяти, а ты его просто хранишь.

когда ты пишешь mas[0] = new int[n], ты говоришь, что область памяти, на которую указывает указатель mas[0] будет иметь размер на n штук интов.

 

если ты второй раз напишешь mas[0] = new int[n], то ты просто затрешь старый указатель, вместе с этим полностью потеряв доступ к старой памяти, и получишь новый участок памяти на n интов размером.

 

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

 

 

Я правильно понял что я выделяю память из кучи, а когда я записываю mas[0][3] Значение 2, то фактически какой-то рандомный кусок из кучи заменяется этим значением

ты не выделяешь память. у тебя есть указатель типа инт на элемент mas[0][0], который ты получил, когда выделил память во второй раз. и по сути то, что ты делаешь - это указатель + 3.

в следующий раз на месте этого элемента может быть что-то другое

Да, я это понял

 

ах да ещё вопрос

mas[0] = new int [1]; тут я

1)как бы выделяю память на ещё 1 элемент

или

2)я указываю что память выделяемая всего на 1 элемент

То есть в 1 случае я могу mas[0] = new int [1]; написать ещё раз и тогда память выделется ещё под 1 элемент, или же mas[0] = new int [1]; второй раз ничего не даст?

да хуй знает

 

чо ты меня спрашиваешь ваще?

 

я ебал в рот работу с памятью, это обязанность ОС

он тебя и не спрашивал

 

и обязанность ос - дать тебе твое собственное виртуальное адресное пространство. Остальное лежит только на твоей совести.


Изменено пользователем Kant

Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

int **mas - двойной указатель на инт

 

mas[0], mas[1], mas[2] - один раз разименовали указатель, получили одинарные указатели на инт

 

mas[0][0] - сам инт, который лежит по указателю, разименованному уже два раза

 

new возвращает указатель на выделенный участок памяти, а ты его просто хранишь.

когда ты пишешь mas[0] = new int[n], ты говоришь, что область памяти, на которую указывает указатель mas[0] будет иметь размер на n штук интов.

 

если ты второй раз напишешь mas[0] = new int[n], то ты просто затрешь старый указатель, вместе с этим полностью потеряв доступ к старой памяти, и получишь новый участок памяти на n интов размером.

 

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

 

 

Я правильно понял что я выделяю память из кучи, а когда я записываю mas[0][3] Значение 2, то фактически какой-то рандомный кусок из кучи заменяется этим значением

ты не выделяешь память. у тебя есть указатель типа инт на элемент mas[0][0], который ты получил, когда выделил память во второй раз. и по сути то, что ты делаешь - это указатель + 3.

в следующий раз на месте этого элемента может быть что-то другое

Да, я это понял

 

ах да ещё вопрос

mas[0] = new int [1]; тут я

1)как бы выделяю память на ещё 1 элемент

или

2)я указываю что память выделяемая всего на 1 элемент

То есть в 1 случае я могу mas[0] = new int [1]; написать ещё раз и тогда память выделется ещё под 1 элемент, или же mas[0] = new int [1]; второй раз ничего не даст?

да хуй знает

 

чо ты меня спрашиваешь ваще?

 

я ебал в рот работу с памятью, это обязанность ОС

он тебя и не спрашивал

 

и обязанность ос - дать тебе твое собственное виртуальное адресное пространство. Остальное лежит только на твоей совести.

хмм ясно, мне просто дан текст и я знаю в нём максимальное количество столбцов, но не знаю количество строк, и вот я подумал увеличивать память для строк по ходу их ввода, не мог ты подсказать функцию для этого

Поделиться сообщением


Ссылка на сообщение

ах да ещё вопрос

mas[0] = new int [1]; тут я

1)как бы выделяю память на ещё 1 элемент

или

2)я указываю что память выделяемая всего на 1 элемент

То есть в 1 случае я могу mas[0] = new int [1]; написать ещё раз и тогда память выделется ещё под 1 элемент, или же mas[0] = new int [1]; второй раз ничего не даст?

массивы имеют постоянную длину потому, что в памяти элементы массива хранятся последовательно.

Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

бля я не врубаюсь

напишите плз

 

бтв еще посоны, ну там у меня бд содержит

• Данные о сотрудниках (фио, адрес, дата рождения, должность); • Данные о услугах(наименование, цена); • Данные о клиенте (фио, адрес, дата рождения); • Данные о договоре(номер договора, данные о сотруднике, данные о услуге, данные о клиенте);

можно как нить 1 раз ввести и чтобы она сохранилась?

 

Хуево тебе. Спроси её может можно на чем-нибудь вменяемом делать. Просто работать с бд на паскале... ну я не знаю... Шурупы она блять пальцами закручивает? Типа отвертки для слабых? Если её важен результат, а не паскальный код то....

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

 

Вот делфи хуйня ебаная, которую embarcadero тупо ведет в могилу.

 

И у казика нет даже намеков на бд в его программе.

 

Я конечно, может и неправ, но нас еще со школы начинали учить сразу .Net.

Имхо - паскаль может и прост, но почти любой другой яп может всё тоже самое, но в разы удобнее и, имхо, ооп проще для понимания человека. Так что если и учить кого-то сейчас - то c#, java, еще что-то. Да, обучаемые не будут использовать всю мощь яп, но зато научившись работать в них не будет проблем с переходами и т.д. Короче - для новичков они так же просты как и паскаль, но в них есть возможность развиваться, а в паскале - нет. Слишком он уж устарел.

Поделиться сообщением


Ссылка на сообщение

ну нихуя ж себе паскаль уже на си похож. бейсик тоже похож?


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

ребят помогите плз, вот суть вводится текст(двумерным чаровским массивом офк) я знаю максимальное количество столбцов в каждой строчке, но не знаю количество строк с помощью какой функции можно расширять память выделяемую на строки по мере их ввода?

Поделиться сообщением


Ссылка на сообщение

ребят помогите плз, вот суть вводится текст(двумерным чаровским массивом офк) я знаю максимальное количество столбцов в каждой строчке, но не знаю количество строк с помощью какой функции можно расширять память выделяемую на строки по мере их ввода?

связанный список.

или сразу выделяешь память на 10 строк, если появляется 11 - создаешь массив из 15 строк, потом 20 и так далее. ну и копируешь


Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

ребят помогите плз, вот суть вводится текст(двумерным чаровским массивом офк) я знаю максимальное количество столбцов в каждой строчке, но не знаю количество строк с помощью какой функции можно расширять память выделяемую на строки по мере их ввода?

связанный список.

или сразу выделяешь память на 10 строк, если появляется 11 - создаешь массив из 15 строк, потом 20 и так далее. ну и копируешь

а с помощью функций реалок малок и т.д разве не получится?

 

просто не холотелось бы ещё ебаться с этими списками

Поделиться сообщением


Ссылка на сообщение

а с помощью функций реалок малок и т.д разве не получится?

 

просто не холотелось бы ещё ебаться с этими списками

а чем тебе не нравится вариант с arraylist, когда ты при надобности выделяешь память на больший массив и свой копируешь туда?

Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение
(изменено)

а с помощью функций реалок малок и т.д разве не получится?

 

просто не холотелось бы ещё ебаться с этими списками

а чем тебе не нравится вариант с arraylist, когда ты при надобности выделяешь память на больший массив и свой копируешь туда?

спасибо, ща попробую разобраться, arraylist надеюсь не требует ни каких библиотек?


Изменено пользователем P0JIT0H

Поделиться сообщением


Ссылка на сообщение

а с помощью функций реалок малок и т.д разве не получится?

 

просто не холотелось бы ещё ебаться с этими списками

а чем тебе не нравится вариант с arraylist, когда ты при надобности выделяешь память на больший массив и свой копируешь туда?

спасибо, ща попробую разобраться, arraylist надеюсь не требует ни каких библиотек?

бля :) когда ты создаешь больший массив, когда твой старый закончился - это и есть arraylist

Колы я выросту - то хочу буты такым як я

5c8bbc85b99e.gif

 

годные смайлы

Поделиться сообщением


Ссылка на сообщение

а с помощью функций реалок малок и т.д разве не получится?

 

просто не холотелось бы ещё ебаться с этими списками

а чем тебе не нравится вариант с arraylist, когда ты при надобности выделяешь память на больший массив и свой копируешь туда?

спасибо, ща попробую разобраться, arraylist надеюсь не требует ни каких библиотек?

бля :) когда ты создаешь больший массив, когда твой старый закончился - это и есть arraylist

сори что туплю наверное)Если я тебя правильно понял создаю 2 массива, в первый записываю значение, потом увеличиваю размерность второго, переношу из первого значения во второй, и делаю тоже самое только наоборот и т.д?я правильно понял?)

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...