c[]正常运行 *c就崩溃
#include <iostream>
using namespace std;
void SwapMemory(void * m1,void * m2, int size)
{
// 在此处补充你的代码
char*temp={0};
char*a=(char*)m1;
char*b=(char*)m2;
char *c;
for(int i=0;i<size;i++){
*c=*a;
*a=*b;
*b=*c;
a++;
b++;
}
}
```c++
#include <iostream>
using namespace std;
void SwapMemory(void * m1,void * m2, int size)
{
// 在此处补充你的代码
char*temp={0};
char*a=(char*)m1;
char*b=(char*)m2;
char c[0];//空指针不能赋值 先指向一片
for(int i=0;i<size;i++){
c[0]=*a;
*a=*b;
*b=c[0];
a++;
b++;
}
}
出错的关键就是c未初始化,c是野指针,没有为c开辟空间,此时c指向一块,当使用*c去访问内容时,自然会报错。
一般来说,对未初始化的指针解引用是未定义行为,没人能保证是否有效,可以产生任何后果。你应该避免这样的行为。
char *c;
*c='a';
此处,既然用了i,你应该想想这里为什么要用char,因为内存的基本单位是字节,所以内存的操作都是以字节为单位进行寻址和操作。C语言中的char类型的大小刚好是一个字节,所以可以借助char,在字节的层面上来操作内存。
void SwapMemory(void * m1,void * m2, int size)
{
// 在此处补充你的代码
char *c1=(char*)m1;
char *c2=(char*)m2;
for(int i=0;i<size;i++){
char t=c1[i];
c1[i]=c2[i];
c2[i]=t;
}
}