错误: 链接:https://www.nowcoder.com/questionTerminal/f8209ee66a1b43158ebdec8814b0cdfb?orderByHotValue=1&done=0&pos=20&onlyReference=false 来源:牛客网
第一,数组越界访问。 第二,数组名不能坐左值直接进行赋值, 第三,strcopy函数的字符串复制是只有遇到\0才停止,而str1中没有\0,所以复制的长度不确定。 第四,string和str1由于是在函数内定义,不是全局变量,所以数组内初始值不确定,strcpy复制操作具有不确定性
void GetMemory( char *p ) { p = (char *) malloc( 100 ); } void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf( str ); }传入中 GetMemory( char *p ) 函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完 char *str = NULL; GetMemory( str ); 后的 str 仍然为 NULL
char *GetMemory( void ) { char p[] = "hello world"; return p; } void Test( void ) { char *str = NULL; str = GetMemory(); printf( str ); }错误:p是局部变量,函数返回,内存就已释放
void GetMemory( char **p, int num ) { *p = (char *) malloc( num ); } void Test( void ) { char *str = NULL; GetMemory( &str, 100 ); strcpy( str, "hello" ); printf( str );错误:未判断内存是否申请成功,应加上: if ( *p == NULL ) { …// 进行申请内存失败处理
} 同时Test 函数中也未对 malloc 的内存进行释放。
swap( int* p1,int* p2 ) { int *p; *p = *p1; *p1 = *p2; *p2 = *p; }在 swap 函数中, p 是一个 “ 野 ” 指针,有可能指向系统区,导致程序运行的崩溃。在 VC++ 中 DEBUG 运行时提示错误 “Access Violation” 。该程序应该改为
swap( int* p1,int* p2 ) { int p; p = *p1; *p1 = *p2; *p2 = p; }