一个内存分配问题#include
str是一个指针型的变量,它的值是NULL,GetMemory( str )其实用的是str的值,也就是NULL,所以GetMemory( str );其实是GetMemory( NULL);我估计步进执行到 p = (char *) malloc( 100 );
就会有错误,实模式下你已经将第零号中断的值给破坏了。 注意,C语言是值传递,也就是只能有上一级程序将值传给被调用的函数,被调用的函数不能将值通过参数再传出来。如果非要把某个变量的值传到外面,唯一的办法就是把上一级程序的某个变量的地址提供给函数,函数将要穿出的写入这个地址,然后就出来了。 当然你这个函数只需要返回一个值,也可...全部
str是一个指针型的变量,它的值是NULL,GetMemory( str )其实用的是str的值,也就是NULL,所以GetMemory( str );其实是GetMemory( NULL);我估计步进执行到 p = (char *) malloc( 100 );
就会有错误,实模式下你已经将第零号中断的值给破坏了。
注意,C语言是值传递,也就是只能有上一级程序将值传给被调用的函数,被调用的函数不能将值通过参数再传出来。如果非要把某个变量的值传到外面,唯一的办法就是把上一级程序的某个变量的地址提供给函数,函数将要穿出的写入这个地址,然后就出来了。
当然你这个函数只需要返回一个值,也可以用return来实现,也就是写成str =GetMemory( )的形式(是不是眼熟?)
正确是做法是
void GetMemory( char **p )
{
*p = (char *) malloc( 100 );/*p是str的地址,*p就是往这个地址里写入分配到内存的地址*/
}
void main( void )
{
char *str = NULL;
GetMemory( &str ); /*取str的地址/*
strcpy( str, "hello world" );
printf( str );
}
或者
void GetMemory( char **p )
{
return (char *) malloc( 100 );
}
void main( void )
{
char *str = GetMemory( );
strcpy( str, "hello world" );
printf( str );
}
程序没有调试,可能有错误仅作示例。
收起