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

Alloc в процедуре

18.09.2019, 22:50. Показов 3878. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нужно создать группу функций с аллокациями. К примеру:
C
1
2
3
struct t *talloc (void) {
   return (struct t*) malloc (sizeof (struct t) * n);
}
Вообщем-то после вызова указатель становится точно ненулевым, но записать туда что-либо совсем не получается, линукс выдает ошибку сегментирования (т.е. вроде как память и не дали). Разумеется, если сделать тот же аллок в мэйне, то всё нормально.
Не то, чтобы я - приверженец процедурного программирования, но подобных, более сложных аллокаций в программе предвидится реально много. Что тут может быть не так?
К слову, если в теле функции попробовать записать данные с ввода, то подобной проблемы не возникает. Например:
C
1
2
3
4
5
6
struct t *talloc (void) {
   struct t *a;
   a = (struct t*) malloc (sizeof (struct t) * n);
   scanf ("%u", &a->num);
   return a;
}
И после этого в мэйне спокойно можно оперировать подобной структурой.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2019, 22:50
Ответы с готовыми решениями:

Ошибка с alloc.h
Программа из методички по Си #include <stdio.h> #include <conio.h> #include <alloc.h> #include <stdlib.h> //изначально не было в...

Библиотека <alloc.h>
Здравствуйте друзья программисты! Я не давно начал изучать Visual C++ и у меня сразу возник вопрос по поводу библиотеки...

alloc init
В начале изучения obj-c возник такой вопрос в чем будет различие между такой записью: NSDate *now = ; и такой записью: NSDate *now...

5
Модератор
 Аватар для long399
2885 / 1840 / 933
Регистрация: 16.10.2013
Сообщений: 5,245
Записей в блоге: 15
19.09.2019, 05:01
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
29
#include <stdio.h>
#include <stdlib.h>
 
struct t{
    int a;
    float b;
};
 
int n = 2;
 
struct t* talloc (void) {
   return (struct t*) malloc (sizeof (struct t) * n);
}
 
int main()
{
    struct t* t1 = talloc();
    
    t1[0].a = 1;
    t1[0].b = 1.399;
    
    t1[1].a = 2;
    t1[1].b = 2.399;
    
    // выводится все, что было записано
    printf("t1[0]={%d, %f}, t1[1]={%d, %f}", t1[0].a, t1[0].b, t1[1].a, t1[1].b);
 
    return 0;
}
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13181 / 6817 / 1821
Регистрация: 18.10.2014
Сообщений: 17,254
19.09.2019, 18:19
Цитата Сообщение от SubtRose Посмотреть сообщение
Вообщем-то после вызова указатель становится точно ненулевым, но записать туда что-либо совсем не получается, линукс выдает ошибку сегментирования (т.е. вроде как память и не дали)
Вы что-то выдумываете. Приводите реальный код, демонстрирующий проблему.
0
3 / 3 / 0
Регистрация: 07.06.2019
Сообщений: 15
20.09.2019, 15:39  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы что-то выдумываете. Приводите реальный код, демонстрирующий проблему.
Всё прозаичней оказалось. У меня было два си-исходника и один заголовочный файл. Структуры задействовались в обоих. Намучавшись с typedef, а также попытками занести их в заголовочный файл, я ни нашёл ничего лучше, чтобы объявить эти структуры в обоих си-файлах. Определения процедур с аллоками у меня были в одном файле, а вызовы в мэйне. Не сложно догадаться, что когда я нагромоздил ВСЁ в один исходник, таковой проблемы не возникало.
0
207 / 58 / 19
Регистрация: 18.02.2018
Сообщений: 258
22.09.2019, 00:34
К слову, в Си, можно обойтись и без (struct t*), в отличие от плюсов...
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13181 / 6817 / 1821
Регистрация: 18.10.2014
Сообщений: 17,254
22.09.2019, 03:17
Цитата Сообщение от Ksyrx Посмотреть сообщение
К слову, в Си, можно обойтись и без (struct t*), в отличие от плюсов
Причем не просто "можно обойтись", а в С его там вообще быть не должно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.09.2019, 03:17
Помогаю со студенческими работами здесь

Помогите отладить программу. Can't find include file <alloc>.
Доброго времени суток,вобщем нужно сделать так,чтобы она заработала.Я запутался в ошибках.Помогите ___________ (Еще почему выскакивает...

Std bad alloc при чтении файла более 1 Гб на 64-битном компиляторе
Использую Qt 5.6.1 и MinGW64. Комплект проверен и работает в другом оконном приложении с большими файлами. Создаю консольное приложение,...

Like в процедуре
Здравствуйте, подскажите, пожалуйста, как в процедуре сконструировать строку для поиска? Вот так, процедура создается, и работает: ...

Подскажите по процедуре
Лююди, подскажите как быть с процедурой ZamenaDiag(A,N,Chislo)

Неясность в процедуре
Товарищи у меня вопросик по процедуре: Ниже приведенные две проц-ры я создал и прописал сразу после implementation ($R, *.dfm)...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru