非常遗憾的是,我不得不承认我已经尝试了一段时间自学c++,但是当涉及到指针时,我真的很困惑。

有人可以向我解释为什么这行不通吗?我没有任何细分错误。它编译我什么也没得到。

#include <iostream>
#include <cstdlib>
#include <cstring>
int main(){
  void *buffer = new char[8];
  memset( (char*)&buffer, 'a', sizeof(buffer) );
  std::cout << (char*)buffer <<std::endl;
  return 0;
}

最佳答案

我看到以下问题。

问题1

memset( (char*)&buffer, 'a', sizeof(buffer) );

那是传递给memset的错误地址。您需要使用:
memset( buffer, 'a', sizeof(buffer) );

问题2
sizeof(buffer)计算为指针的大小(32位平台为4,64位平台为8)。您需要使用数组的长度,即8
memset( buffer, 'a', 8 );

问题3
std::cout << (char*)buffer <<std::endl;

仅当buffer为空终止字符串时才有效。如果使用memset,则所有有效内存都将设置为a。因此,字符串不是以null结尾的。

您需要确保buffer以null终止。
buffer[7] = '\0';
std::cout << buffer <<std::endl; // No need for explicit cast

关于c++ - 在C++中分配内存的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35821711/

10-11 22:23
查看更多