powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Си. Освободить память 2-мерного сторкового массива
25 сообщений из 308, страница 5 из 13
Си. Освободить память 2-мерного сторкового массива
    #40130577
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В последних версиях есть средства и потяжелее (топику не поможет, но может остальным=)

fsanitize
fanalyzer
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130584
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Alex_Ustinov-Wall И -Werror

-Wextra тоже рекомендую.
-Werror все предупреждения валит в ошибку
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130587
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov-Werror все предупреждения валит в ошибку

И это - самый надёжный способ не упустить что-то важное, всё правильно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130590
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получаем что - Werror перекроет - Wall (+ - Wextra )
получаем ИЛИ )
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130602
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, он не перекрывает, а дополняет. Без -Wall/extra он бесполезен, поскольку не
активизируется без наличия предупреждений. И сам по себе не повышает уровень
диагностики.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130611
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня так (какой то код вначале этого топика)
gcc-8.3.0 (Win10)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
g++.exe -Werror  -c Projects\111\main.cpp -o obj\Release\main.o
g++.exe  -o bin\Release\111.exe obj\Release\main.o   
\111\main.cpp: In function 'int main()':
\111\main.cpp:11:14: error: ISO C++ forbids converting a string constant to 'char*' [-Werror=write-strings]
   11 |     ip_var = "192.168.0.1";
      |              ^~~~~~~~~~~~~
cc1plus.exe: all warnings being treated as errors
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))

...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130613
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovу меня так (какой то код вначале этого топика)
А без -Werror ты получаешь чистый вывод или то же самое в виде
предупреждения?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130622
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

предупреждение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
g++.exe   -c Projects\111\main.cpp -o obj\Release\main.o
g++.exe  -o bin\Release\111.exe obj\Release\main.o   
Projects\111\main.cpp: In function 'int main()':
Projects\111\main.cpp:11:14: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
   11 |     ip_var = "192.168.0.1";
      |              ^~~~~~~~~~~~~
Output file is bin\Release\111.exe with size 322.79 KB
Process terminated with status 0 (0 minute(s), 0 second(s))
0 error(s), 1 warning(s) (0 minute(s), 0 second(s))

выше наврал
gcc version 9.2.0 (tdm64-1) CBlocks20
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130651
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinov
у меня так (какой то код вначале этого топика)
gcc-8.3.0 (Win10)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
g++.exe -Werror  -c Projects\111\main.cpp -o obj\Release\main.o
g++.exe  -o bin\Release\111.exe obj\Release\main.o   
\111\main.cpp: In function 'int main()':
\111\main.cpp:11:14: error: ISO C++ forbids converting a string constant to 'char*' [-Werror=write-strings]
   11 |     ip_var = "192.168.0.1";
      |              ^~~~~~~~~~~~~
cc1plus.exe: all warnings being treated as errors
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))

Ну правильно. С++ на такое смотрит косо. А С разрешает. Одно из различий между языками.
А если будешь внимательнее читать топик, то узнаешь что этот код рассчитывался именно на С.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130655
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovgcc version 9.2.0 (tdm64-1)

Кстати, эта версия имеет бага в обработке исключений на 64-х битах.
Скомпилированная программа крашится если адрес исключения выше четырёх гигабайт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130657
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Ну правильно. С++ на такое смотрит косо. А С разрешает. Одно из различий между языками.
А если будешь внимательнее читать топик, то узнаешь что этот код рассчитывался именно на С.
если посмотреть внимательно о чем говорилось в конце - то речь об опциях компилятора ("с чем едят" -Werror) ... зачем спать за рулем?)

Dimitry SibiryakovКстати, эта версия имеет бага в обработке исключений на 64-х битах.давно не обновлялся, летом "сено косил")
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130658
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Ustinovдавно не обновлялся, летом "сено косил")

Десятка TDM вообще не работает, так что можно даже не пробовать. Я вернулся к
8.1 от MinGW-W64.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130709
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

8.1 тоже есть, рядом стоит
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130718
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Появилась проблема.

Нужно динамически сформировать имя переменной, типа такого:


Код: plaintext
1.
char*      conninfo_127.123.123.123=(char *)malloc(1000);




Этих переменных будет формироваться огромное количество и статически их задать не получится.

сами строки типа conninfo_127.123.123.123 я сформирую, но как потом сформированную строку объявить как переменную?

Подскажите пожалуйста.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130722
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Динамических имен переменных в Си нет. Для таких целей обычно используют ассоциативные массивы, но в Си их тоже нет.
Есть в С++ std::map и std::unordered_map
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130726
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Динамических имен переменных в Си нет. Для таких целей обычно используют ассоциативные массивы, но в Си их тоже нет.
Есть в С++ std::map и std::unordered_map


Ну смотрите:


Код: plaintext
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.
30.
31.
32.
33.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>



int main()
{

char* server5_ip="172.0.0.5";
char* conn_info=(char *)malloc(1000);


conn_info[0] = 0; //занулить

//собрать строку
strcat(conn_info,"conn_");
strcat(conn_info,server5_ip);


//выводит  conn_172.0.0.5
printf("conn_info: %s\n", conn_info);



//надо как-то conn_172.0.0.5
//объявить как:
// char*      conn_172.0.0.5=(char *)malloc(1000);


    return 0;
}
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130727
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

неужели никак нельзя имя переменной сформировать динамически? (
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130728
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъно как потом сформированную строку объявить как переменную?

Никак. Меняй постановку задачи. Начни с вопроса "зачем мне все эти переменные
нужны, да ещё и одновременно".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130729
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Уткъно как потом сформированную строку объявить как переменную?

Никак. Меняй постановку задачи. Начни с вопроса "зачем мне все эти переменные
нужны, да ещё и одновременно".


они нужны для парралельных коннектов, которых может быть от 1 до 10000.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130730
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Похоже придется статически объявить и использовать поочереди, но это очень неудобно :(
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130731
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
объявить какое-то количество, равное сколько коннектов одновременно может выполняться, 100 например.

И использовать поочереди, но это очень неудобно :(
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130733
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъони нужны для парралельных коннектов, которых может быть от 1 до 10000.

А зачем нужны параллельные коннекты?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130734
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторяю, для таких целей используют ассоциативные массивы.
Схематично это выглядит так
Код: plaintext
1.
2.
3.
arr["172.0.0.5"] = "..."; //Присваиваешь

printf("%s\n", arr["172.0.0.5"]); // Используешь


Это в С++ так.

PS Имена переменных условны, во время работы они превращаются в адрес памяти, где хранится содержимое.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130741
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Повторяю, для таких целей используют ассоциативные массивы.
Схематично это выглядит так
Код: plaintext
1.
2.
3.
arr["172.0.0.5"] = "..."; //Присваиваешь

printf("%s\n", arr["172.0.0.5"]); // Используешь


Это в С++ так.

PS Имена переменных условны, во время работы они превращаются в адрес памяти, где хранится содержимое.


Все время забываю проусловность переменных )


Кстати, такая идея пришла:

Можно же стуктуру наверное использовать, точнее массив из структуры.

Там просто типы не только char*, но и специфичиские библиотечные типа буфера и тп.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130742
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Уткъони нужны для парралельных коннектов, которых может быть от 1 до 10000.

А зачем нужны параллельные коннекты?


чтобы уменьшить время выполнения программы.
...
Рейтинг: 0 / 0
25 сообщений из 308, страница 5 из 13
Форумы / C++ [игнор отключен] [закрыт для гостей] / Си. Освободить память 2-мерного сторкового массива
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]