web-dev-qa-db-ja.com

g ++エラー:「malloc」はこのスコープで宣言されていません

Fedoraでg ++を使用して、次の行があるopenGLプロジェクトをコンパイルしています。

_textureImage = (GLubyte**)malloc(sizeof(GLubyte*)*RESOURCE_LENGTH);
_

コンパイルするとき、g ++エラーは言います:

_error: ‘malloc’ was not declared in this scope
_

_#include <cstdlib>_を追加してもエラーは修正されません。

私のg ++​​バージョンは:g++ (GCC) 4.4.5 20101112 (Red Hat 4.4.5-2)

20
Ovilia

C++コードでは、newではなくmallocを使用する必要があります。したがって、new GLubyte*[RESOURCE_LENGTH]代わりに。 #include <cstdlib>mallocを名前空間stdにロードするので、std::malloc(または#include <stdlib.h>代わりに)。

31
user786653

追加のインクルードが必要です。追加 <stdlib.h>インクルードのリストに。

17
dragonroot

Fedora上のg ++​​でこのエラーを再現します。

このエラーをできるだけ簡単に再現する方法:

このコードをmain.cに配置します:

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

コンパイル、コンパイル時エラーを返します:

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));
                                     ^  

このように修正:

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

その後、コンパイルして正常に実行されます:

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

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