Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прошу помочь исправить ошибу типов 
:(
    Опции темы
AlexeySheglov
Дата 3.6.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



Код

#include "module1.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int StkErr;
int CreateStack(struct StrStack* stk, int n)
{
    char ** p;
     p=calloc(n, sizeof (char **)); // ТУТ РУГАЕТСЯ КОМПИЛЯТОР
     if (p==NULL){
          StkErr=STACK_NOSTACK;
          return -1;
     }
     stk->ps=p;
     stk->size=n;
     stk->top=0;
     StkErr=STACK_NOERROR;
     return 0;
}
void DeleteStack(struct StrStack* stk)
{
     free(stk->ps);
     stk->size=0;
     stk->top=0;
}
int PushStack(char * s, struct StrStack* stk)
{
     if (stk->size==0){
          StkErr=STACK_NOSTACK;
          return -1;
     }
     if (stk->top == stk->size){
          StkErr=STACK_OVERFLOW;
          return -1;
     }
     stk->ps[stk->top]=s;
     stk->top++;
     return 0;
}

char* PopStack(struct StrStack* stk)
{
     if (stk->size==0)
          {
          StkErr=STACK_NOSTACK;
          return NULL;
     }
     if (stk->top == 0)
          {
          StkErr=STACK_UNDERFLOW;
          return NULL;
     }
     stk->top--;
     return stk->ps[stk->top];
}



Помогите исправить выдает
ошибку error C2440: '=' : cannot convert from 'void *' to 'char **'.
PM MAIL   Вверх
jonie
Дата 3.6.2009, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Код
p=(char**)calloc(n, sizeof (char **)); // ТУТ РУГАЕТСЯ КОМПИЛЯТОР

делай

Это сообщение отредактировал(а) jonie - 3.6.2009, 19:16


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
fry
Дата 3.6.2009, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Код

char ** p;
     p=calloc(n, sizeof (char **)); // ТУТ РУГАЕТСЯ КОМПИЛЯТОР


Может так будет понятнее:

Код

#define char_ptr char*

char_ptr  *p; //Обрати внимание на "char_ptr*"
p=calloc(n, sizeof (char_ptr*)); //calloc возвращает void*


Необходимо:
 - привести void* к char_ptr   и
 - убрать лишнее обозначение указателя, т.е. "char_ptr  *p" исправить на "char_ptr  p"  или
 - выбрать элемент твоего массива из char_ptr (перед этим выделив под него память), например так: p[n]

При этом
Код

сalloc(n, sizeof (char **)); 

sizeof (char **) помоему попахивает косяком. Не находишь?

Это сообщение отредактировал(а) fry - 3.6.2009, 19:58
PM MAIL   Вверх
jonie
Дата 3.6.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Цитата
sizeof (char **) помоему попахивает косяком. Не находишь?

я не нахожу. Где тут косяк? Указатель на указатель - аля "2Д динамический массив". Что там такого?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
fry
Дата 3.6.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Ну если выделяется место под двумерный массив типа char, то все ОК.
Именно потому, что не в курсе намерений автора я не стал утверждать.

Однако:
Код

p=(char**)calloc(n, sizeof (char **)); // ТУТ РУГАЕТСЯ КОМПИЛЯТОР

явно не гуд.

Добавлено через 4 минуты и 58 секунд
Если по нормальному судить:
Функция возвращяет указатель на область памяти, а автору нужен массив на указатели на эту самую область

Это сообщение отредактировал(а) fry - 3.6.2009, 20:06
PM MAIL   Вверх
math64
Дата 4.6.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



В большинстве случаев (если не во всех) sizeof(char**) == sizeof(char*), но вообще-то нужно писать
Код

p=(char**)calloc(n, sizeof (char *));

PM   Вверх
AlexeySheglov
Дата 4.6.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



Спасибо большое. норм все. работает.
PM MAIL   Вверх
fry
Дата 4.6.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: 2
Всего: 3



Помогло
Код

p=(char**)calloc(n, sizeof (char *));


вместо

Код

p=(char**)calloc(n, sizeof (char **));

????

Проблема была ведь с
Код

p=calloc(

Цитата

error C2440: '=' : cannot convert from 'void *' to 'char **'.


Или явное задание компиллятору преобразования исправило ситуацию?

PM MAIL   Вверх
AlexeySheglov
Дата 4.6.2009, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



нет, помогло именно 1: p=calloc(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.