一、下面程序有什么错误:
swap(int *p1,int *p2)
{
int *p;
*p=*p1;
*p1=*p2;
*p2=*p;
}
//这里p是一个野指针,应改为:
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}//可以实现函数外部*p1 *p2的交换
void swap(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}//只能在函数内部实现交换,不能在函数外部实现 *p1 *p2的交换
二、以下代码有什么错误:
#include<iostream>
using namespace std;
int main()
{
char *S="huahua";
cout<<S<<endl;
S[0]='B';
cout<<S<<endl;
return 0;
}
程序编译时不出错,运行时会出现内存不能读的错误。
因为"huahua”是字符串常量,S是指针。指向字符串常量,正确的声明方式为 : const char *S="huahua";因为是常量,对S【0】的赋值操作是不合法的。
三、找出下面的错误
#include<iostream>
using namespace std;
int main()
{
char *S=(char*)malloc(sizeof(char)*10);
S="hua";
cout<<S<<endl;
return 0;
}
程序执行之后,最后需要释放内存。free();
四、下面程序有什么错误:
int a[60][250][1000],i,j,k;
for (k=0;k<=1000;k++)
{
for (j=0;j<=250;j++)
{
for (i=0;i<=60;i++)
{
a[j][k]=0;
}
}
}
答:需要把循环语句内外对换一下。
五、指出错误:
int **p;
int arr[100];
p=&arr;
指针类型不同,应该为:
int **p;
int *q;
int arr[100];
q=arr;
p=&q;
六、改正错误:
#include<iostream>
using namespace std;
#define MAX 255
int main()
{
unsigned char A[MAX],i;
for (i=0;i<=MAX;i++)//i范围:0---255,当i=255时,i++变为0,因此,for为死循环
{
A[i]=i;//A[255]=255会越界。A【】范围是从A【0】----A【254】
}
return 0;
}
七、下面程序:
char a;
char *str=&a;
strcpy(str,"huaddddddddddddd");//没有为str分配内存空间,将会发生异常
//将一个字符串复制进一个字符变量所指地址,虽然可以正确输出结果,但是因为越界导致程序崩溃
cout<<str<<endl;
八、下面程序有什么错误
#include<iostream>
#include<windows.h>
using namespace std;
void GetMemory(char *p)
{
p=(char*)malloc(100);
}
int main()
{
char *str=NULL;
GetMemory(str);
strcpy(str,"huahua");
cout<<str<<endl;
return 0;
}
函数形参是字符串指针,在函数内部修改形参是不能真正改变传入形参的值去执行完的。函数不能返回动态内存。
#include<iostream>
using namespace std;
char* GetMemory(void)
{
char p[]="huahua";
return p;
}
int main()
{
char *str=NULL;
str=GetMemory();
cout<<str<<endl;
return 0;
}
函数GetMemory返回时,p[]的内存已经释放。所以运行得不到想要的结果。
#include<iostream>
using namespace std;
void GetMemory(char **p,int num)
{
*p=(char*)malloc(num);
}
int main()
{
char *str=NULL;
GetMemory(&str,100);
strcpy(str,"huahua");
cout<<str<<endl;
return 0;
}
问题:1:应该在*p=(char*)malloc(num);后面加
if (*p==NULL)
{
cout<<"申请内存失败!"<<endl;
}
2:没有free();
注意:free() 之后要对指针赋值NULL。
str=NULL;否则指针会变成野指针。
八、字符串倒序问题
指出下面程序的错误:
#include<iostream>
using namespace std;
int main()
{
char *src="0123456789";
char *dest=NULL;
int len=strlen(src);
dest=(char*)malloc(sizeof(char)*(len+1));
char *d=dest;
char *s=src[len];
while (len--!=0)
{
d++=s--;
}
cout<<dest<<endl;
return 0;
}
1、没有free
2、对d要'\0'
3、将字符调换,使用*d++=*s--
4、s=src[len-1], 并且 不能将char 赋值给 char *
改为:
#include<iostream>
using namespace std;
int main()
{
char *src="0123456789";
char *dest=NULL;
int len=strlen(src);
dest=(char*)malloc(sizeof(char)*(len+1));
char *d=dest;
char *s=src+len-1;
while (len-->=0)
{
*d++=*s--;
}
*d='\0';
cout<<dest<<endl;
return 0;
}
九、数组越界
char *src="0123456789";
char dest[10];
strcpy(dest,src);
字符串src需要11个字节才能放下,因此dest需要11个字节。strcpy会导致数组越界。
627

被折叠的 条评论
为什么被折叠?



