c中这段代码的正确形式是什么?
char *x = malloc(100);
码
#include <stdlib.h>
#include <stdio.h>
int main(){
char *x=malloc(100);
free(x);
//in c++
// char *x=new char[100];
return 0;
}
这里是错误
1>------ Build started: Project: memory_leaks, Configuration: Debug Win32 ------
1>Build started 8/1/2010 2:32:21 PM.
1>PrepareForBuild:
1> Creating directory "c:\users\david\documents\visual studio 2010\Projects\memory_leaks\Debug\".
1>InitializeBuildStatus:
1> Creating "Debug\memory_leaks.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1> memory_leaks.cpp
1>c:\users\david\documents\visual studio 2010\projects\memory_leaks\memory_leaks\memory_leaks.cpp(5): error C2440: 'initializing' : cannot convert from 'void *' to 'char *'
1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.64
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
答案 0 :(得分:9)
您有有效的C代码,但您正在尝试使用C ++编译器进行编译。 (事实上,如果您将源重命名为memory_leaks.c
,您的开发环境可能会自动调用C编译器;使用memory_leaks.cpp
它会调用C ++编译器。)
C和C ++是不同的语言。 C ++看起来像C一样有额外的东西,因为它是从一种带有额外东西的C语言发展而来的。但它现在是它自己的语言。不要混淆它们。
特别是,如果在malloc
之前添加一个强制转换,您可能会得到编译的C ++代码,但是您将无法获得良好的C ++代码。不要这样做:如果你是用C ++编程,请使用new
;如果您使用C编程,请使用C编译器。
答案 1 :(得分:-3)
你必须像“<* p>”一样投射到“char *”
char * x = (char *)malloc(100*sizeof(char));
由于:
void *malloc(int);