Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/10: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Zatattak
0 / 0 / 0
Регистрация: 26.08.2010
Сообщений: 3
1

Выделение памяти под динамический массив выдает ошибку

26.08.2010, 23:00. Просмотров 1897. Ответов 9
Метки нет (Все метки)

В общем проблема такова, при компиляции вылазит ошибка:
27 C:\Users\USER\Desktop\projects\main.c invalid conversion from `void*' to `char*'

C
1
2
3
4
5
6
7
8
9
char *strgs[MaxStr];
...
...
 
while( fgets(buf, BSIZE - 1, in) != NULL){
           strgs[i] = malloc(strlen(buf) +1); // строка выдающая ошибку
           strcpy(strgs[i], buf);
           ++i;
           }
в чем проблема разобраться не могу, просьба помочь.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2010, 23:00
Ответы с готовыми решениями:

Выделение памяти под динамический массив
Нужна помощь, кому не трудно откликнитесь. Нубас вообще в указателях и выделении памяти. ...

Выделение памяти под динамический массив строк
Суть программы такова: при вызове функции количество структур увеличивается на одну, выделяется под...

Выделение памяти под двумерный массив
Здравствуйте! скажите пожалуйста почему нельзя выделить под двумерный массив память через функцию....

Динамическое выделение памяти под массив
Здравствуйте, помогите пожалуйста сделать в процедуре input динамическое выделение памяти под...

Динамическое выделение памяти под массив
Доброго времени! Требуется ввести размер массива с клав-ры, заполнить массив - изменить его размер...

9
ForEveR
В астрале
Эксперт С++
8013 / 4770 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
26.08.2010, 23:07 2
Zatattak,
C
1
strgs[i]=malloc((strlen(buf)+1)*sizeof(char))
. Быть может поможет.

Не по теме:

Если что извините) В маллоках не силен

0
Евгений М.
1060 / 996 / 102
Регистрация: 28.02.2010
Сообщений: 2,883
Завершенные тесты: 2
26.08.2010, 23:09 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Кажется так:
C
1
strgs[i]=(char*)malloc(strlen(buf)+1)
2
Zatattak
0 / 0 / 0
Регистрация: 26.08.2010
Сообщений: 3
26.08.2010, 23:11  [ТС] 4
2 Lavroff, спасибо за попытку, но ничего не изменилось, да и по логике функции malloc, аргумент целочисленный, а каким образом оно получено по идее не важно, если говорю глупость, поправьте
0
26.08.2010, 23:11
ForEveR
В астрале
Эксперт С++
8013 / 4770 / 654
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
26.08.2010, 23:13 5
Евгений М., Точно. Забыл про то что там тип надо указывать)
0
Zatattak
0 / 0 / 0
Регистрация: 26.08.2010
Сообщений: 3
26.08.2010, 23:15  [ТС] 6
2 Евгений М
спасибо, помогло, где конкретно почитать про природу ошибки и исправления?
0
Евгений М.
1060 / 996 / 102
Регистрация: 28.02.2010
Сообщений: 2,883
Завершенные тесты: 2
26.08.2010, 23:19 7
Прочитайте про явное преобразование типов, про функцию malloc (точнее переменную какого типа возвращает).
Сам книги не читал. Гуглил.
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10677 / 6376 / 1589
Регистрация: 25.07.2009
Сообщений: 12,122
26.08.2010, 23:46 8
На самом деле указатель на void должен сам приводиться к указателю на любой другой тип, и то, что компилятор на это ругается, вообще-то не правильно. Это мелкостудия 2005 у меня, помню, на то же самое ругалась. А вот gcc такой код без проблем компилит, как вобщем-то и должно происходить...
test_malloc.png
0
Andrew_Lvov
Эксперт С++
260 / 190 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
27.08.2010, 00:07 9
Цитата Сообщение от easybudda Посмотреть сообщение
На самом деле указатель на void должен сам приводиться к указателю на любой другой тип, и то, что компилятор на это ругается, вообще-то не правильно. Это мелкостудия 2005 у меня, помню, на то же самое ругалась. А вот gcc такой код без проблем компилит, как вобщем-то и должно происходить...
Синтаксис неявного приведения из void* разрешён в C и запрещён в C++.
0
kravam
быдлокодер
1714 / 901 / 106
Регистрация: 04.06.2008
Сообщений: 5,588
27.08.2010, 08:42 10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Так надо
C++
1
2
3
4
5
6
7
8
9
char *strgs[MaxStr];
...
...
 
while( fgets(buf, BSIZE - 1, in) != NULL){
           strgs[i] = (char*) malloc(strlen(buf) +1); // строка выдающая ошибку
           strcpy(strgs[i], buf);
           ++i;
           }
0
27.08.2010, 08:42
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2010, 08:42

Выделение памяти под трехмерный массив
Здравствуйте. Выделяю память под трехмерный массив, но не получается обратиться к элементу...

Выделение памяти динамически под массив
Есть программа, нужно выделить динамически память под массив, все попытки сделать это...

Динамическое выделение памяти под многомерный массив
Проблема с выводом многомерного массива. Может память неправильно выделяю? Помогите чайнику. ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.