The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Опубликован исходный код системы совместной разработки и публикации кода huje, opennews (?), 19-Мрт-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


35. "Опубликован исходный код системы совместной разработки и пуб..."  +1 +/
Сообщение от n00by (ok), 19-Мрт-21, 13:26 
Стоило бы помимо фанбойских лозунгов привести хоть какие-то аргументы. Например, нижеследующий корректный код потенциально может (когда-нибудь потом) привести к порче стека:


  struct block_line lines[MAXLINES + 2];

/// ...

  memset(&lines, 0, MAXLINES * sizeof(struct block_line));


Ответить | Правка | К родителю #14 | Наверх | Cообщить модератору

38. "Опубликован исходный код системы совместной разработки и пуб..."  –1 +/
Сообщение от Аноним (-), 19-Мрт-21, 13:57 
Мимо. Б2 Е4 ?
Ответить | Правка | Наверх | Cообщить модератору

39. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от n00by (ok), 19-Мрт-21, 14:47 
> Мимо.

Если изменить объявление lines

struct block_line lines[MAXLINES + 2];

размер объекта может измениться, но код оттранслируется без ошибок.

Вариант с

memset(&lines, 0, sizeof(line));

выглядит проще и потенциальной проблемы лишен.

Я бы инициализировал сразу в определении.
Правда, я не Си-разработчик, что бы на эту тему говорить всерьёз, не изучал код и не понял, зачем  там финт с +2. Но есть вариант и с MAXLINES * sizeof(*line)

> Б2 Е4 ?

Я не шахматист, видел лишь краем глаза FAQ про ТЛП. Насколько помню, он пошёл со Светочки.

Ответить | Правка | Наверх | Cообщить модератору

40. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от Аноним (-), 19-Мрт-21, 15:02 
Вот смотри, у тебя есть память, стековая, куча, не важно. Ты ее заполняешь, допустим инты - int a[16] , размер памяти которые ты должен заолнить ровна 16 * размер инта (в большинстве случаев 2 байта, иногда 4). Структура содержит в себе элементы, т.е число этих элементов умножаем на размер всех элементов струткуры, пусть там будет int int - 8 т.е структура твоя 8 байт умноженая на MAXLINES . Понимаешь ? И вот у тебя int int которые ты не знаешь сколько весят ты коговоришь sizeof int, это не может быть предустановленной константой никак.
Ответить | Правка | Наверх | Cообщить модератору

51. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от n00by (ok), 19-Мрт-21, 16:56 
Там выше у меня ошибка в имени, Вы её для второго варианта (MAXLINES * sizeof(*lines)) разглядели, но замечание и первого касается. sizeof(lines) это размер всего массива.
Ответить | Правка | Наверх | Cообщить модератору

62. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от Аноним (-), 19-Мрт-21, 18:19 
> sizeof(lines) это размер всего массива

Нет, это не размер масива. Рекомендую освежить знания по сям.

Ответить | Правка | Наверх | Cообщить модератору

69. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от n00by (ok), 20-Мрт-21, 08:33 
>> sizeof(lines) это размер всего массива
> Нет, это не размер масива. Рекомендую освежить знания по сям.

Давайте освежим.

6.5.3.4 The sizeof and _Alignof operators

7 EXAMPLE 2

Another use of the sizeof operator is to compute the number of elements in an array:


sizeof array / sizeof array[0]

и вот свеженькое:

8 EXAMPLE 3

In this example, the size of a variable length array is computed and returned from a function


#include <stddef.h>

size_t fsize3(int n)
{
  char b[n+3];       // variable length array
  return sizeof b;   // execution time sizeof
}

int main()
{
  size_t size;
  size = fsize3(10); // fsize3 returns 13
  return 0;
}


Ответить | Правка | Наверх | Cообщить модератору

74. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от Аноним (15), 21-Мрт-21, 12:27 
Там берётся не размер массива, а размер указателя на него. Я даже не поленился пруф скрафтить.

#include <stdio.h>

int a[15] = {1,2,3,4,5,6,7,8,1,2,3,4,5,6,7};

int main(void) {
    printf("%d", sizeof(&a));
    return 0;
}

Ответить | Правка | Наверх | Cообщить модератору

76. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от n00by (ok), 21-Мрт-21, 15:28 
> Там берётся не размер массива, а размер указателя на него. Я даже
> не поленился пруф скрафтить.
>  printf("%d", sizeof(&a));

"Там" -- это стандарт языка Си. Со стандартом спорить не принято. И там берётся размер массива. В так называемом "пруфе" действительно берётся размер указателя, но он мимо темы, поскольку зачем-то добавлен &

Ответить | Правка | Наверх | Cообщить модератору

77. "Опубликован исходный код системы совместной разработки и пуб..."  –2 +/
Сообщение от Аноним (15), 21-Мрт-21, 19:13 
Но в примере выше по треду берётся размер именно указателя.
Ответить | Правка | Наверх | Cообщить модератору

81. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от n00by (ok), 22-Мрт-21, 09:51 
> Но в примере выше по треду берётся размер именно указателя.

Я надеюсь, что Вы Алзим, запойный алкоголик из "Розалаб". В ином случае Вам следует сходить к окулисту: в моих примерах берётся либо размер массива (именно он процитирован в #62 рекомендатором освежений), либо размер его элемента.

Ответить | Правка | Наверх | Cообщить модератору

41. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от Аноним (-), 19-Мрт-21, 15:04 
Разве что не sizeof(line), а sizeof( * lines) и зачем утруждаться на заполнение заранее неиспользуемых + 2 ?  
Ответить | Правка | К родителю #39 | Наверх | Cообщить модератору

50. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от n00by (ok), 19-Мрт-21, 16:46 
> Разве что не sizeof(line), а sizeof( * lines)

Да, верно, я накосячил при копипасте. Такой вариант позволяет определить размер элемента в общем виде, не зная его тип.

> и зачем утруждаться на
> заполнение заранее неиспользуемых + 2 ?

Вопрос в том, зачем вообще нужны неиспользуемые элементы.

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

Ответить | Правка | Наверх | Cообщить модератору

56. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от Аноним (-), 19-Мрт-21, 17:28 
На сколько я вижу - это какой-то парсер, наверняка на всякий случай да и правильно, на 8 байт не обеднеем и за границы ничего не полезет. Впринципе - вот теперь я точно одобряю этот вариант, хотя нулить можно по такой логике и все подряд. Но т.к это просто парсер на секунду - наверное эти 8 байт я щедро одолжу программе на пару наносекунд :D
Ответить | Правка | Наверх | Cообщить модератору

58. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от Аноним (58), 19-Мрт-21, 17:53 
> Вопрос в том, зачем вообще нужны неиспользуемые элементы.

В Сишном мире так принято из соображений безопасности. Явно, четко, выразительно.
Если Вы это заметили - значит цель 100% достигнута.

Ответить | Правка | К родителю #50 | Наверх | Cообщить модератору

70. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от n00by (ok), 20-Мрт-21, 08:42 
>> Вопрос в том, зачем вообще нужны неиспользуемые элементы.
> В Сишном мире так принято из соображений безопасности. Явно, четко, выразительно.

Будьте так любезны, разверните мысль. Эти два лишних (судя по MAX перед LINES) элемента массива от чего конкретно защищают? Или какой вектор атаки перекрывают? Я пока не смотрю код, что бы у меня осталась возможность сесть в лужу.

> Если Вы это заметили - значит цель 100% достигнута.

Я заметил, что какой-то фанбой публикует фрактальные мантры, но ничем их не обосновывает. Посмотрел несколько файлов, вот за это глаз зацепился. Значит и член секты Свидетелей Сишных Дыр тем более мог это найти и подкрепить свои мантры. Меня такие вещи малость напрягают, поскольку если у меня косяк с граничными условиями, значит потом оказывается, что я не понял что написал. Такое решение возможно и ради упрощения алгоритма, но это не очевидно. Как бы то ни было, ошибок я не нашёл, только придирка, а это хороший показатель, от проекта одного человека нельзя многого требовать.

Ответить | Правка | Наверх | Cообщить модератору

42. "Опубликован исходный код системы совместной разработки и пуб..."  +1 +/
Сообщение от Аноним (-), 19-Мрт-21, 15:05 
> Правда, я не Си-разработчик, что бы на эту тему говорить всерьёз,

Та я тоже , это так из керигана и ричи что-то помню

Ответить | Правка | К родителю #39 | Наверх | Cообщить модератору

52. "Опубликован исходный код системы совместной разработки и пуб..."  +/
Сообщение от n00by (ok), 19-Мрт-21, 17:01 
Я вот помнил, что про sizeof(*lines) должно быть у Ален И. Голуб, но почему то там не нашёл.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру