Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 17.08.2013
Сообщений: 14

Где в данном примере использовать fixed?

16.06.2014, 14:57. Показов 1026. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите разобраться, куда тут Fixed ?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        bool b;
 
 
 unsafe private void buttonTest_Click(object sender, EventArgs e)
   {
        b = false;
     
       testFunc(&b);
      
       MessageBox.Show(b.ToString());
   }
 
    unsafe  void  testFunc (bool* a)
   {
       *a = true;
   }
 
    }
    }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.06.2014, 14:57
Ответы с готовыми решениями:

Как мыслить в данном примере?
Скажите глядя на такой пример из Head first - изучаем Java: (если я правильно понимаю он должен решаться устно и без IDE) Вы: -...

Найти ошибку в данном примере
#include <math.h> #include <iostream> using namespace std; int main() { int n, a; cin >> n; int sum = 1/a; for (int...

Что не так в данном примере
Добрый день. Можете подсказать что не так в данном примере, скорей всего не правильны написания формул --> function y=f(x) >...

16
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.06.2014, 15:36
Лучший ответ Сообщение было отмечено NickoTin как решение

Решение

Цитата Сообщение от Вечный нуб Посмотреть сообщение
куда тут Fixed ?
Вот сюда:
C#
1
2
3
4
5
fixed (bool* ptr = &b)
{ 
   *ptr = false;
   testFunc(ptr);
}
1
0 / 0 / 0
Регистрация: 17.08.2013
Сообщений: 14
16.06.2014, 15:47  [ТС]
спасибо.
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
16.06.2014, 15:56
kolorotur, А нужен ли тут Fixed вообще?

Добавлено через 8 минут
Вечный нуб, в данном случае Fixed не нужен вообще т.к. сборщик мусора уберет ее тогда когда твоя кнопка уже не будет существовать
0
 Аватар для Spawn
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
16.06.2014, 16:00
EVG-1980, а зачем по-Вашему fixed вообще используется?
Цитата Сообщение от MSDN
The fixed statement is used to declare pointers to the source and destination arrays. It pins the location of the src and dst objects in memory so that they will not be moved by garbage collection. The objects will be unpinned when the fixed block completes
Пример из MSDN.
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
16.06.2014, 16:07
Цитата Сообщение от Spawn Посмотреть сообщение
will not be moved by garbage collection.
Ну и какие условия видимости у
C#
1
bool b;
когда ее тронет GC ?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
16.06.2014, 16:13
Цитата Сообщение от EVG-1980 Посмотреть сообщение
когда ее тронет GC ?
Когда посчитает нужным переместить созданный экземпляр Form1 в памяти, для например, дефрагментации кучи.

Поле b видно во всём классе Form1, если бы это была переменная внутри метода, тогда да, fixed не нужен был бы.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.06.2014, 16:13
Цитата Сообщение от EVG-1980 Посмотреть сообщение
А нужен ли тут Fixed вообще?
Елы-палы, ну это же пример — из кода видно.
Человек начал небезопасный код изучать. Этак мы докатимся и до комментариев в стиле "а какую задачу здесь решает вывод в консоль слов Hello world?".
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
16.06.2014, 16:27
про дефрагментацию забыл

Добавлено через 7 минут
GC отдыхает
C#
1
bool* ptr = stackalloc bool[1];
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.06.2014, 16:29
Цитата Сообщение от EVG-1980 Посмотреть сообщение
C#
1
bool* ptr = stackalloc bool[1];
C#
1
2
bool b;
bool* ptr = &b;
0
0 / 0 / 0
Регистрация: 17.08.2013
Сообщений: 14
16.06.2014, 16:48  [ТС]
А нужен ли тут Fixed вообще?

да вроде нужен, там не одна переменная.

тут ещё трабла вылезла.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        object[] freg = new object[3];
 
 
 unsafe private void buttonTest_Click(object sender, EventArgs e)
   {
                            fixed (Array* FRM = &freg)  // в этом месте уже не работает,
                                               // с простыми массивами(например int)
                                              // вроде норм, а с объектами не хочет.
                       {
                            testFunc(FRM);
                       }
     
             MessageBox.Show(freg[1].ToString());
   }
 
    unsafe  void  testFunc (Array* a)
   {
       for(int i=0;i<3;i++)
      *a[i] = "значение";
  
   }
 
    }
    }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.06.2014, 17:29
Цитата Сообщение от Вечный нуб Посмотреть сообщение
в этом месте уже не работает
Указатель можно создавать только на т.н. неуправляемые типы: примитивы, перечисления и структуры, состоящие из примитивов, перечислений и таких же структур.
1
0 / 0 / 0
Регистрация: 17.08.2013
Сообщений: 14
16.06.2014, 17:43  [ТС]
Ясно, спасибо. Хорошо хоть "Point" он воспринимает, для моей задачи должно хватить.
Хотя понравилось с object работать, жаль только что у него Dispose отсутствует (
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.06.2014, 17:45
Цитата Сообщение от Вечный нуб Посмотреть сообщение
понравилось с object работать
Чем?

Цитата Сообщение от Вечный нуб Посмотреть сообщение
жаль только что у него Dispose отсутствует
Зачем?
0
0 / 0 / 0
Регистрация: 17.08.2013
Сообщений: 14
16.06.2014, 17:52  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Чем?
В него можно любые данные запихнуть, а потом одной функцией, в зависимости от содержания выдавать результат.

Цитата Сообщение от kolorotur Посмотреть сообщение
Зачем?
Чтобы не писать отдельную функцию для уничтожения объекта (типа привести его к типу label или button а затем уничтожить.) а просто object.Dispose().
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
16.06.2014, 18:07
Цитата Сообщение от Вечный нуб Посмотреть сообщение
В него можно любые данные запихнуть, а потом одной функцией, в зависимости от содержания выдавать результат.
Когда говорят "любые данные", то, как правило, подразумевают какую-то категорию этих данных. Например, массив контролов, в котором в перемешку лежат лейблы, кнопки и т.д.
Если это так, то старайтесь для такого массива использовать ближайший тип, являющийся общим для всех элементов массива. Например, Control[].
Поди и с Dispose проблема разрешится

Цитата Сообщение от Вечный нуб Посмотреть сообщение
Чтобы не писать отдельную функцию для уничтожения объекта (типа привести его к типу label или button а затем уничтожить.) а просто object.Dispose().
1. Dispose не уничтожает объект, а освобождает неуправляемые ресурсы, используемые этим объектом (при нормальной реализации, конечно).
2. Если все объекты в вашем массиве имеют этот метод, то и тип массива, как сказано выше, должен быть соответствующим: IDisposable[]
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
16.06.2014, 18:08
Вечный нуб,
Цитата Сообщение от Вечный нуб Посмотреть сообщение
В него можно любые данные запихнуть, а потом одной функцией, в зависимости от содержания выдавать результат.
Только это отнимает кучу времени на операции упаковки и распаковки

Цитата Сообщение от Вечный нуб Посмотреть сообщение
Чтобы не писать отдельную функцию для уничтожения объекта (типа привести его к типу label или button а затем уничтожить.) а просто object.Dispose().
Управляемые типы уничтожает мусорщик сам и не надо Dispose()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.06.2014, 18:08
Помогаю со студенческими работами здесь

Почему ответ равен 0 в данном примере: 3/4*6!?
Почему ответ равен 0 в данном примере: 3/4*6!?

Объясните работу с интерфейсами в данном примере
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Observer { class...

Непонятно функционирование цикла while в данном примере
Всем привет, ребят! Заранее благодарю за помощь. Пример взят из книги Шилдт C++ &quot;Шаг за шагом&quot; и немного модифицирован мной,...

Как приметить конкатенацию в данном примере
Уважаемые форумчяне и модераторы, а также гуру Возникла очередная проблема Необходимо отправить информацию на Form6.Label X .Text ...

Как в данном примере сделать 2 процесса параллельными?
Есть база данных на sql server 2008 с номерами телефонов и программа на delphi 2010, осуществляющая поиск по этой базе данных нужного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru