|
0 / 0 / 0
Регистрация: 18.11.2022
Сообщений: 42
|
||||||
Вылетает при memcpy() на C++14.07.2023, 12:59. Показов 5257. Ответов 7
Вылетает при memcpy. Не знаю почему.
Делаю вектор на С. В коде, после инициализации вектора на int при использовании int number = 50; push_vector_t(vec, &number); вылетает программа без ошибок. В отладке я заметил, что вылетает только при memcpy. vec->data - массив, data - элемент.
Я добавил безопасность и проверки. Все равно вылетает. Вы можете проверить код. https://github.com/PGStudioGH/VectorC/tree/main Добавлено через 19 минут Флаг оптимизации -O0, -O1 работает без вылета, а -O2 и более вылетает
0
|
||||||
| 14.07.2023, 12:59 | |
|
Ответы с готовыми решениями:
7
Memcpy - вылетает исключение
Ошибка при использовании memcpy |
|
фрилансер
6444 / 5637 / 1128
Регистрация: 11.10.2019
Сообщений: 14,991
|
||||||||
| 14.07.2023, 15:15 | ||||||||
Сообщение было отмечено PGStudio как решение
Решение
PGStudio,
Макросы непонятно, зачем накиданы. Удобства они не добавляют
vector_t*вроде, вот: тут передаётся vector_t*, а нужен vector_t**
в free_vector_t - то же самое
1
|
||||||||
|
0 / 0 / 0
Регистрация: 18.11.2022
Сообщений: 42
|
||||||||||||||||
| 14.07.2023, 19:55 [ТС] | ||||||||||||||||
|
Алексей1153,
Ну... Разве не очевидно, что эти макросы для тех, кто не хочет видеть знаки * и &? Это имитация простого использования std::vector на С++. Посмотри разницу С++ и С
Почему typedef struct vector_t* vector, а не typedef struct vector_t vector? Потому что вообще выдает ошибка, если написать vector v;, из-за приватности структуры. Конечно, специально сделал, чтобы не был доступ к переменным в структуре в main.c. Это значит, что не получилось имитировать. Добавлено через 6 минут Насчет с этим кодом
Добавлено через 45 минут Обновил vector и main в GitHub. Есть пример использования вектора. Надеюсь вы можете понимать.
0
|
||||||||||||||||
|
фрилансер
6444 / 5637 / 1128
Регистрация: 11.10.2019
Сообщений: 14,991
|
||||||||
| 14.07.2023, 19:59 | ||||||||
|
Насчёт удобства push/insert - тут частично согласен, немного добавляет удобство. Но остальные макросы лишние. Ещё один момент по оформлению кода: не unsigned int и не int (внезапно, в функции print_vector_t - почему-то вообще int ) а size_tзатем - какие-то лишние касты:
Добавлено через 2 минуты лишние проверки указателей на ненулёвость перед вызовом free лишние проверки !data , хотя достаточно поверить !size а ещё - зачем при создании вектора сразу аллоцируется место под один элемент? Вектор должен создаваться пустым
0
|
||||||||
|
0 / 0 / 0
Регистрация: 18.11.2022
Сообщений: 42
|
|
| 14.07.2023, 20:26 [ТС] | |
|
Допустим, vector это обычный тип, но обязательно использовать макросы. Можно понять как использовать в примере кода.
Остальные макросы могут понадобиться. Потому что если использовать макросы и функции одновременно, в коде будут цвета слова отличаться, что выглядит не очень красиво. Поэтому специально созданы макросы для красоты. Забыл менять... Изначально был int. Может лишние, но мне не нравится, когда здесь предупреждение о арифметики в типе void*. Ещё, если убрать лишние, строка будет очень длинной. Это немного неудобно читать. Можно использовать free(NULL)? Я думал, что может выдать ошибку из-за попытки освобождения по нулевым указателем. Думаю, ты прав, что должен оставаться пустым. Добавлено через 3 минуты MSVC говорит, что malloc и realloc может возвращать NULL, если память недостаточна. Поэтому я добавил проверку, чтобы случайно не ломался вектор.
0
|
|
|
фрилансер
6444 / 5637 / 1128
Регистрация: 11.10.2019
Сообщений: 14,991
|
||||
| 14.07.2023, 20:41 | ||||
|
Добавлено через 36 секунд Добавлено через 3 минуты кстати, есть ещё ошибки - в конце функций hard_way и easy_way отсутствует возврат значения Добавлено через 33 секунды наверное, проще у них возвращаемый тип сменить с int на void Добавлено через 4 минуты
0
|
||||
|
0 / 0 / 0
Регистрация: 18.11.2022
Сообщений: 42
|
|
| 14.07.2023, 21:01 [ТС] | |
|
Да, ты прав. Я использую компилятор g++, gcc и msvc одновременно, чтобы проверить совместимость. Хотел сделать, чтобы вектор поддерживал не только С, но и С++.
Поправил в Github. VectorC стал безопаснее, зато быстрее, чем std::vector. Я проверил. Благодарю за подсказки!
0
|
|
|
фрилансер
6444 / 5637 / 1128
Регистрация: 11.10.2019
Сообщений: 14,991
|
||
| 14.07.2023, 21:06 | ||
![]() Добавлено через 1 минуту понятно, что для Си придётся велосипедить, но в C++ нужно оставить std::vector
0
|
||
| 14.07.2023, 21:06 | |
|
Помогаю со студенческими работами здесь
8
Сегфолт при попытке вызвать memcpy
Безопасно ли использовать memcpy при выделении памяти по ходу выполнения програмы
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|