我正在尝试更多地了解malloc()并需要帮助澄清输出.我想保留10个字节的内存并能够单独访问它们,但它们必须在一个块中.这是代码:
#include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
int main()
{
char neededbytes = 10;
char *p;
p = (char *)malloc(neededbytes * sizeof(char));
if(p==NULL)
{
cout<<"Error! memory not allocated.";
exit(0);
}
else
{
for (int i = 0; i < neededbytes; i++)
{
p[i] = 0;
}
for (int i = 0; i < neededbytes; i++)
{
cout<<"Address at index " << i << " is ";
cout<<&p+i<<endl;
}
}
free(p);
}
Run Code Online (Sandbox Code Playgroud)
程序的输出显示所有地址相隔8个字节.它们不应该只相隔一个字节吗?有没有办法让我知道char我的架构上是否消耗了8个字节?
小智 6
&p+i是相同的(&p)+(i),因为p有类型char*,&p有类型char**.因此,添加i实际上会将i * sizeof(char *)字节添加到表示的地址&p.
你想要的是p + i,它将i * sizeof(char)为存储的地址添加字节p.换句话说,您在使用时已经有一个指向连续数据的指针malloc().当然,这是C++,因此char *通常由std::cout和std::cerr,以及std::ostream类来处理.你需要做的事情static_cast<void *>(p + i)而不是p + i你在C中使用的事情.
正如其他人所指出的,你应该避免使用malloc(),并free()在C++中可能的情况下,C++拥有new[]并delete[]经营你的目的.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |