Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2023, 17:42   #11
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
какой, извиняюсь, malloc для C++
Даже не знаю зачем, а почему бы и не malloc()... И почему C++, тема С/С++, так что можно и так и так.
apofioz вне форума Ответить с цитированием
Старый 10.01.2023, 18:07   #12
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
а почему бы и не malloc()
-чтобы меньше путаться в размерах и типах
-чтобы не пытаться запомнить, нужно вызвать free или delete/delete[]
-чтобы, когда типы будут с конструкторами и деструкторами, не было UB

Цитата:
Сообщение от apofioz Посмотреть сообщение
И почему C++
это - C++, ибо
Цитата:
Сообщение от apofioz Посмотреть сообщение
#include<iostream>
using namespace std;
Цитата:
Сообщение от apofioz Посмотреть сообщение
Даже не знаю зачем
вот я и советую не пользоваться в C++ malloc/free
Алексей1153 на форуме Ответить с цитированием
Старый 10.01.2023, 18:27   #13
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
это - C++, ибо
Я пробовал разные варианты из-за этого и включил данные библиотеки, ну и чтобы с выводом меньше париться.


Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
вот я и советую не пользоваться в C++ malloc/free
Совет понятен и логичен спорить не стану, просто хочу добить эту тему с malloc()/free() к тому же в программировании winapi чаще, всё же, встречается код на С или в стилистике С.
apofioz вне форума Ответить с цитированием
Старый 10.01.2023, 18:32   #14
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
чтобы меньше путаться в размерах и типах
Я с такой проблемой вообще впервые столкнулся, разве что с выводом текстов было нечто подобное, когда текст на кириллице вывод в файл выполнялся некорректно, так там тоже эта тема с unicode кодировкой проскакивала, но что бы выделить память и освободить её вызывало такие затруднения, такое впервые, я просто понять не могу, что такого там может происходить, что копирование из одного блока памяти в другой вызывает такие проблемы, где портится память, что free() не может её освободить...
apofioz вне форума Ответить с цитированием
Старый 10.01.2023, 18:41   #15
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

apofioz, ну так включи в настройках проекта компилятор C. И не будет проблем с конструкторами (за отсутствием таковых).

Сейчас у тебя используется компилятор для C++ и язык тоже
Алексей1153 на форуме Ответить с цитированием
Старый 10.01.2023, 18:55   #16
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
ну так включи в настройках проекта компилятор C. И не будет проблем с конструкторами (за отсутствием таковых).
Что за проблемы с конструкторами? Включил С компилятор ну на.. такое чудо, ошибок вылезло ни словом сказать ни пером описать), спасибо!
Ошибки убрал, проект собрал с компилятором С, но ошибка так же, что и в первом посте. Так что хрен редьки не слаще.

Последний раз редактировалось apofioz; 10.01.2023 в 18:59.
apofioz вне форума Ответить с цитированием
Старый 10.01.2023, 19:36   #17
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Код:
for(i = 0; i < row; ++i)
	{
		a[i] = (wchar_t*)malloc(wcslen(aStr[i])*sizeof(wchar_t)+2);
		wcscpy_s(a[i], wcslen(aStr[i])+1, aStr[i]);
		//lstrcpy(a[i], aStr[i]);
	}
Так и головой можно поехать, оказывается в данном случае нужно указывать количество символов плюс один, дурдом.
apofioz вне форума Ответить с цитированием
Старый 10.01.2023, 19:40   #18
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
a[i] = (wchar_t*)malloc(wcslen(aStr[i])*sizeof(wchar_t)+2);
->
Код:
a[i] = malloc((wcslen(aStr[i])+1) * sizeof(*a[i]));

Цитата:
Сообщение от apofioz Посмотреть сообщение
Так и головой можно поехать
ещё вариант - заглянуть в документацию по функции

Последний раз редактировалось Алексей1153; 10.01.2023 в 20:31.
Алексей1153 на форуме Ответить с цитированием
Старый 10.01.2023, 19:59   #19
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
ещё вариант - заглянуть в документацию по функции
И? что же я должен там улицезреть в этой документации. Неужели нечто такое, что могло помочь мне сэкономить нервы, не думаю.


Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
a[i] = malloc((wcslen(aStr[i])+1) * (*a[i]));
Это что за дичь) Размер строки(в символах) плюс один умножается на первый символ.?
apofioz вне форума Ответить с цитированием
Старый 10.01.2023, 20:32   #20
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 951
По умолчанию

apofioz, упс, я sizeof пропустил. Подправил

это к слову о лёгкости ошибок
Алексей1153 на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Утечка памяти [Освобождение памяти массива] denis76560 Общие вопросы Delphi 4 27.11.2016 18:20
Освобождение памяти vipok72 Общие вопросы Delphi 30 05.08.2015 00:09
освобождение памяти Homa_1983 Общие вопросы C/C++ 7 31.08.2013 14:36
Освобождение памяти Seran4ek Общие вопросы Delphi 7 21.12.2009 18:07
Освобождение памяти VadEr Общие вопросы Delphi 2 17.04.2009 22:23