小单同学shan 2022-02-17 13:34 采纳率: 100%
浏览 31
已结题

c[]和*c的区别 为什么用*c就会崩溃

问题遇到的现象和发生背景

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++;
} 

}

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • bostonAlen 2022-02-17 13:52
    关注

    出错的关键就是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;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月27日
  • 已采纳回答 2月19日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 求一份STM32F10X的I2S外设库
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?