c++ - 删除 char* 进行字节转换

标签 c++ c

每次读取文件时,我都尝试使用不同长度的字节来读取二进制文件。获得值后,我尝试将字节转换为 char*

我创建了一个简单的代码如下:

//This code is compiled in Visual Studio 2010
typedef unsigned char BYTE;

BYTE *s;
s = new BYTE[3]; // I read 2 bytes from the file, I add +1 to reserve NULL
s[0]= 'a'; s[1]='b';s[2]=NULL;  //just an example I get 2 bytes from file

char* b;
b = new char(sizeof(s));
strcpy(b,(char*)s);
s[0]='x';
cout << s <<"--"<< b<< "--"<< endl;
delete[] s;
delete[]  b;
cin.get();
return 0;`

但是,代码生成错误“检测到堆损坏”。当我删除该行时,delete[] b; 程序运行良好。但是我不确定下次是否会出现问题。请有人解释一下吗?删除delete[] b;会不会导致内存泄露?有什么改进我的代码的建议吗?

最佳答案

这个:

b = new char(sizeof(s));

应该是:

b = new char[sizeof(s)];

否则你不是在创建一个数组,你只是在创建一个指向字符代码为 sizeof(a) 的 char 的指针。

因此 delete[] b 导致它崩溃,因为你试图删除一个没有数组的数组。

还有另一个问题,sizeof(s) 不会给你你想要的。 s 是一个动态分配的数组,因此调用 sizeof(s) 不会 会为您提供 s 中字符大小的总和。 sizeof(s) 将返回指向 s 的指针的大小。

关于c++ - 删除 char* 进行字节转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13964612/

相关文章:

c++ - 奇怪的 C++ 访问私有(private)成员问题

在没有系统库的情况下将 unix 时间戳转换为日期

c - 奇怪函数 "printf"的输出精度

c - 为什么进程不能抢占中断?

全局范围内的两个对象可以同名吗?

c++ - 将 ostream 重定向到输出文件

c++ - 没有 MFC 的 CPtrArray(到 STL 或 Boost)

c++ - 检查输入值是否为 float ,清除 cin

c++ - 在 OpenCL 中为嵌入式配置文件创 build 备上下文

c - 错误 : function declared as function returning function