web-dev-qa-db-fra.com

Erreur g ++: ‘malloc’ n’a pas été déclaré dans cette étendue

J'utilise g ++ sous Fedora pour compiler un projet openGL, qui a la ligne:

textureImage = (GLubyte**)malloc(sizeof(GLubyte*)*RESOURCE_LENGTH);

Lors de la compilation, une erreur g ++ indique:

error: ‘malloc’ was not declared in this scope

L'ajout de #include <cstdlib> Ne résout pas l'erreur.

Ma version g ++ est: g++ (GCC) 4.4.5 20101112 (Red Hat 4.4.5-2)

20
Ovilia

Vous devez utiliser new dans le code C++ plutôt que malloc pour qu'il devienne new GLubyte*[RESOURCE_LENGTH] au lieu. Quand vous #include <cstdlib> il chargera malloc dans l'espace de noms std, donc référez-vous à std::malloc (ou #include <stdlib.h> au lieu).

31
user786653

Vous avez besoin d'une inclusion supplémentaire. Ajouter <stdlib.h> à votre liste d'inclusions.

17
dragonroot

Reproduisez cette erreur dans g ++ sur Fedora:

Comment reproduire cette erreur le plus simplement possible:

Mettez ce code dans main.c:

#include <stdio.h>
int main(){
    int *foo;
    foo = (int *) std::malloc(sizeof(int));
    *foo = 50;
    printf("%d", *foo);
}

Compilez-le, il renvoie une erreur de temps de compilation:

el@apollo:~$ g++ -o s main.c
main.c: In function ‘int main()’:
main.c:5:37: error: ‘malloc’ was not declared in this scope
     foo = (int *) malloc(sizeof(int));
                                     ^  

Fixez-le comme ceci:

#include <stdio.h>
#include <cstdlib>
int main(){
    int *foo;
    foo = (int *) std::malloc(sizeof(int));
    *foo = 50;
    printf("%d", *foo);
    free(foo);
}

Ensuite, il se compile et s'exécute correctement:

el@apollo:~$ g++ -o s main.c

el@apollo:~$ ./s
50
5
Eric Leschinski