2013-11-29 2 views
2

мой код показывает это предупреждение при компиляции с помощью« g ++ -Wall -pedantic -Wno-long-long -c main.c ». Я должен составить в этом режиме, becouse его домашнее задание, и мы имеем приложение, которое исправляет их и использует этот режим компиляцииПочему я получаю «Неверное преобразование из« void * »в ошибку« int ** »?

  1. Ошибка:. недопустимое преобразование из «пустоты» в «Int **» [-fpermissive ]
  2. Ошибка: неправильное преобразование из "пустоты" в "Int *" [-fpermissive]
  3. Ошибка: неправильное преобразование из "пустоты" в "основной (INT, символ * ) :: VYSLEDEK" [-fp ermissive]

такие же ошибки продолжаются, как и в моей программе. Я попытался изменить почти все в этом realloc, это все равно.

Части кода:

struct VYSLEDEK 
{ 
    int sirka; 
    int vyska; 
    int zacatek_x; 
    int zacatek_y; 
    int soucet; 
} *vysledek; 
    int **matice,**soucty; 

    .....  

    matice=(int**)malloc(1*sizeof(int*)); 
    matice[0]=(int*)malloc(1*sizeof(int)); 
    soucty=(int**)malloc(1*sizeof(int*)); 
    soucty[0]=(int*)malloc(1*sizeof(int)); 

    ..... 

1.  matice=realloc(matice,naalokovano*2*sizeof(int*)); 
2.  soucty=realloc(soucty,naalokovano*2*sizeof(int*)); 

    ..... 

     for (i=0;i<(naalokovano*2);i++) 
     { 
3.   matice[i]=realloc(matice[i],sizeof(int)); 
4.   soucty[i]=realloc(soucty[i],sizeof(int*)); 
     }; 

    ..... 

5.  vysledek=realloc(vysledek,vysledku*sizeof(struct VYSLEDEK*)); 

Спасибо за вашу помощь.

+0

В C, * никогда * не отбрасывать правую сторону присваивания: т. Е. Отбрасывать '(int **)' cast from '(int **) malloc'. Это не нужно и делает код сложнее поддерживать. Обратите внимание, что вы используете компилятор C++. – Bathsheba

+2

Используя g ++, вы компилируете свой C-код как C++. Чтобы сделать это, вам нужно вернуть возврат из 'realloc'. Ваши призывы к 'malloc' приводят примеры того, как это сделать. – simonc

+0

@Bathsheba Это не C++ хотя (поскольку g ++ используется как компилятор)? – simonc

ответ

3

Вы уже произвели результат malloc в нужном виде. Сделайте то же самое и для звонков realloc.

ОТВЕТ: Не жалуйтесь, что они заставляют вас включать предупреждения. Я думаю, что это самая разумная вещь по умолчанию, я всегда использую как минимум -Wall -Werror.

Смежные вопросы