jav*_*ava 0 c pointers segmentation-fault
这段代码有什么问题?
void input(int *nmbrOfUnits);
int main() {
int *nmbrOfUnits;
input(nmbrOfUnits);
}
void input(int *nmbrOfUnits) {
printf("numnber if units: ");
scanf(" %d", nmbrOfUnits);
}
Run Code Online (Sandbox Code Playgroud)
编辑:变量是在main中创建的,这应该意味着如果主调用输入变量没有从堆栈中加载.我为什么要在堆上分配它?我传递一个指针并在scanf中使用它.为什么我在这里遇到分段错误?
指针应指向将写入值的内存.例如
int *nmbrOfUnits = malloc( sizeof( int ) );
Run Code Online (Sandbox Code Playgroud)
要么
int x;
int *nmbrOfUnits = &x;
Run Code Online (Sandbox Code Playgroud)
另一种方法是允许函数本身分配将由指针指向的mamory.例如
void input( int **nmbrOfUnits )
{
*nmbrOfUnits = malloc( sizeof( int ) );
if ( *nmbrOfUnits != NULL )
{
printf( "numnber if units: " );
scanf( " %d", *nmbrOfUnits );
}
}
//...
int *nmbrOfUnits;
//...
input( &nmbrOfUnits );
Run Code Online (Sandbox Code Playgroud)