Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > malloc в Eclipse


Автор: bigturtle 3.3.2009, 17:52
Здравствуйте есть код в eclipse+mingw
Код

#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
int main() {
    
    char *p;
    p=malloc(100);//вот тут ошибка
    printf("Start\n");
    return 0;
}



invalid conversion from `void*' to `char*'

подскажите пожалуйста, что за ошибка? что нужно делать? 

Автор: Lazin 3.3.2009, 17:58
открыть учебник и почитать про указатели и приведение типов smile 

Автор: bigturtle 3.3.2009, 18:01
Какой именно сейчас два передомной лежат 1- Бредли Л Джонс ..С за 21 день...   2-Герберт Шилдт ... Полный справочник по С... 

Пример взят из него стр 141.

Автор: nerezus 3.3.2009, 18:55
bigturtle, шилдт? не надо его читать лучше...

Цитата

invalid conversion from `void*' to `char*'
 тут есть ответ. Переведу тебе его на русский(но ты должен выучить английский, если хочешь стать программистом, это ОБЯЗАТЕЛЬНО): неверное преобразование из `void*' в `char*'

Подсказка:
p - это char *
а malloc() - это void*

Автор: Acer 3.3.2009, 19:13
Цитата(Lazin @ 3.3.2009,  17:58)
открыть учебник и почитать про указатели и приведение типов smile

и рядом положить англо-русский словарь smile

Автор: zim22 3.3.2009, 19:42
Цитата(bigturtle @  3.3.2009,  17:52 Найти цитируемый пост)
подскажите пожалуйста, что за ошибка? что нужно делать? 

тут есть ответ: http://www.cplusplus.com/reference/clibrary/cstdlib/malloc.html

Автор: bigturtle 3.3.2009, 20:29
Спасибо хоть один нормальный ответ! 
Книжки, книжки форум рулит! тут всегда правильно посоветуют. 
Единственное вопрос остается почему напечатано именно так

char *p;
    p=malloc(100);

вот из википедии

dynamic_array = malloc(number_of_elements * sizeof(float));
if(!dynamic_array)
{
   /* обработка ошибки выделения памяти */
}
 
/* … работа с элементами массива … */
 
free(dynamic_array);
dynamic_array = NULL;


аналогично

Автор: Anikmar 3.3.2009, 20:32
Цитата(bigturtle @  3.3.2009,  20:29 Найти цитируемый пост)
Спасибо хоть один нормальный ответ! 
Книжки, книжки форум рулит! тут всегда правильно посоветуют. 
Единственное вопрос остается почему напечатано именно так


Книжки рулят!

А форум помогает!

Впервые вижу, чтобы С++ по википедии изучали  smile 

Автор: bigturtle 3.3.2009, 20:33
Ага smile  я не по википедии ладно проехали всем спасибо, а в книжке то и написано..... так вот ошибка и произошла...

Автор: inside_pointer 4.3.2009, 03:30
Цитата(bigturtle)

Герберт Шилдт ... Полный справочник по С


есть такой, ошибок там тонна, там даже есть такая запись

Код

    p = strtok("Травка зеленеет, солнышко блестит", " ");
    printf(p);


strtok проводит изменения со строкой и это не канает под опечатку, среди опечаток там, что более-менее похоже, освобождение элементов списка, когда две строчки не в том порядке стоят, из-за чего список освобождается сначала узел, потом его удаление, потом следующий за ним узел

короче я не знаю насчёт C++, но в С он шарит плохо, там в книжке видно чужие коды ещё (очень много применяют gets в ужасном стиле, где почти на каждом шагу можно завалить программу), но его код там тоже есть и тоже не обременён интеллектом - интерпретатор C, где несколько функций выдаются за нечто грандиозное, да и запись операторов в одну строчку типа if (a) return 1; else return 0; или какие нибудь выражение посложнее в том же виде говорят об отладке и любовь к виндовс, ни слова про юникс, что тоже говорит об уровне

зато очень хорошо написано про бинарные деревья, я много читал в инете про методы их обхода, ничего так и не поняв, а там с одного раза ясно - хорошо объясняет, но только то, что знает

указатель заставляет тебя приводить компилятор для C++, в стандарте ANSI C указатель на void можно присваивать напрямую, как с приведением там и без (ещё с ним можно сравнивать), в стандарте C99 это не менялось, в C++ могло

Автор: xvr 4.3.2009, 14:50
Цитата(bigturtle @ 3.3.2009,  20:29)
Единственное вопрос остается почему напечатано именно так

char *p;
    p=malloc(100);

В С это допустимо, в С++ - нет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)