为什么会出现“从不兼容类型'void *'分配给'int *'”错误?

时间:2019-08-14 11:16:45

标签: c gcc

我正在代码学院学习c,并且从不兼容的类型'void *'错误得到了分配给'int *'的信息。我的文件是一个.c文件,其中包括stdlib.h。我不理解该错误,似乎更正使用了相同的代码行。

我正在尝试使用malloc创建一个数组。

我试图找到其他主题的答案。看来malloc并不是实现它的最佳方法,但是我想找到一种使它起作用的方法。

我在Mac上,我使用emacs编写et gcc进行编译。

这是我的代码的一部分:

int main(int argc, char *argv[])
{
  char mot_secret[] = "PISCINE";
  int nombre_lettres = strlen(mot_secret);
  int *pnombre_lettres = &nombre_lettres;
  int *decouverte = NULL;
  int compteur = 10;

  decouverte = malloc(nombre_lettres * sizeof(int));
  if (decouverte == NULL)
    {
      exit(0);
    }

这是解决方案: (我尝试翻译一些变量)

int main(int argc, char* argv[])
{
    char lettre = 0;
    char secretword[100] = {0};
    int *lettreTrouvee = NULL; 
    long coupsRestants = 10; // Compteur de coups restants (0 = mort)
    long i = 0;
    long wordSize = 0;

    wordSize = strlen(secretWord);

    lettreTrouvee = malloc(tailleMot * sizeof(int)); // creates a dynamic array of the size of the original)
    if (lettreTrouvee == NULL)
        exit(0);

错误是:

TP.C:17:16: error: assigning to 'int *' from incompatible type 'void *'
  decouverte = malloc(nombre_lettres * sizeof(int));

非常感谢您的帮助,如果我在英语上有任何错误,我们深表歉意。

3 个答案:

答案 0 :(得分:12)

看来您文件的名称为TP.C

在Unix传统中,C源文件被命名为*.c(小写c),而C ++源文件被命名为*.C(大写C)。由于Windows不区分大小写,因此在Windows上使用了替代*.cpp,但是MacOS上的gcc足够像unix一样,它将*.C文件视为C ++。

答案 1 :(得分:8)

给出此错误消息:

TP.C:17:16: error: assigning to 'int *' from incompatible type 'void *'
  decouverte = malloc(nombre_lettres * sizeof(int));

看来您的文件名为TP.CThe upper-case .C file extension causes GCC to compile the file as C++

file.cc
file.cp
file.cxx
file.cpp
file.CPP
file.c++
file.C
     必须预处理的

C ++源代码。请注意,在“ .cxx”中,最后两个>必须都在字面上是“ x”。 同样,“。C”表示字母大写C。

您需要使用小写字母。重命名文件,使其以.c-小写的c结尾。

答案 2 :(得分:-9)

从malloc返回的类型始终为void *,可以将其强制转换为所需的数据类型。

您需要执行以下操作: (int *)malloc(nombre_lettres * sizeof(int));

来源:cplusplus