相关疑难解决方法(0)

如何用C++中的new运算符初始化内存?

我刚刚开始进入C++,我想养成一些好习惯.如果我刚刚int使用new运算符分配了一个类型的数组,我怎么能将它们全部初始化为0而不用自己循环遍历它们?我应该用memset吗?有没有"C++"方法呢?

c++ memory-management initialization new-operator

163
推荐指数
6
解决办法
12万
查看次数

我应该如何编写符合ISO C++标准的自定义新的和删除操作符?

我应该如何编写符合ISO C++标准的自定义newdelete运算符?

这是在延续重载new和delete在非常照明C++ FAQ,操作符重载,以及其后续,一个为什么要更换默认的new和delete操作?

第1部分:编写符合标准的new运算符

第2节:编写符合标准的delete运算符

(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法首先开始,所以你的答案很可能被那些提出想法的人阅读.)
注意:答案是基于Scott Meyers的学习'更有效的C++和ISO C++标准.

c++ operator-overloading c++-faq new-operator delete-operator

62
推荐指数
4
解决办法
1万
查看次数

C++中的静态全局变量

我想通过malloc方法创建一个整数数组.我希望这个数组是全局的,可以在我的程序中的任何地方使用.我把代码放在一个看起来像这样的头文件中:

static int *pieces;
Run Code Online (Sandbox Code Playgroud)

然后我有一个功能,用我想要的数字填充它.该函数位于命名空间中,命名空间在其自己的.cpp文件中实现.但是,我将头文件导入main.c并从创建数组的命名空间调用该函数,如:

pieces = malloc(sizeof(int) * 128);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试访问main中的数组中的数字时(在调用创建我的数组的函数之后),它崩溃并说没有初始化那些碎片.但是在我拥有的功能中,我可以创建它并操纵它中的数字就好了.我的印象是,通过使片段成为静态变量,只要某个函数在任何地方发生变化(或设置它),那么这将影响变量在任何地方的使用.基本上我想说的是为什么片断在主体中显示未设置,即使我将它设置在我调用的函数中?

c++ variables static pointers global

35
推荐指数
3
解决办法
6万
查看次数

c ++动态数组的初始值

我需要动态创建一个整数数组.我发现在使用静态数组时的语法

int a [5]={0};
Run Code Online (Sandbox Code Playgroud)

将所有元素的值正确初始化为0.

有没有办法在创建动态数组时做类似的事情

int* a = new int[size];
Run Code Online (Sandbox Code Playgroud)

而不必遍历数组的所有元素?或者使用for循环赋值仍然是最佳方法?谢谢

c++

25
推荐指数
3
解决办法
3万
查看次数

使用std :: unique_ptr的双(二维)数组

我有一个指针分配给指针的双数组.

  // pointer to pointer
  int **x = new int *[5];   // allocation
  for (i=0; i<5; i++){
      x[i] = new int[2];
  }

  for (i=0; i<5; i++){      // assignment
      for (j=0; j<2; j++){
          x[i][j] = i+j;
      }
  }

  for (i=0; i<5; i++)   // deallocation
      delete x[i];
  delete x;
Run Code Online (Sandbox Code Playgroud)

我试图这样做unique_ptr:

std::unique_ptr<std::unique_ptr<int>[]> a(new std::unique_ptr<int>[5]);
  for (i=0; i<5; i++)
      a[i] = new int[2];
Run Code Online (Sandbox Code Playgroud)

但一直都是这样说的错误no operator = matches these operands.我在这做错了什么?

c++ unique-ptr c++11

10
推荐指数
3
解决办法
2万
查看次数

C++ new*char不是空的

我有一个问题.

我在ASIO中开发服务器,数据包是尖头char.

当我创建新的char(例如char * buffer = new char[128];)时,我必须手动将其清理为空值.

通过:

for(int i =0;i<128;i++)
{
buffer[i] = 0x00;
}
Run Code Online (Sandbox Code Playgroud)

我做错了,那个字母不清楚?

c++ null pointers char

8
推荐指数
2
解决办法
8074
查看次数

C++默认初始化会将数组元素设置为其默认值吗?

请考虑以下代码:

#include <iostream>

using namespace std;

int main(){
  int* p = new int[2];
  for (int i = 0; i < 2; i++)
    cout << p[i] << endl;  
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我跑了好几次.它总是产生以下输出:

0
0
Run Code Online (Sandbox Code Playgroud)

我可以假设C++默认初始化将数组元素设置为其默认值吗?在这种情况下,我可以假设p的元素值始终设置为0吗?

我已阅读以下相关问题.但他们并没有专门针对我的案例:

c++ arrays initialization new-operator

4
推荐指数
1
解决办法
1112
查看次数

为什么这个应用程序不会消耗尽可能多的内存

我写了一个简单的应用程序来测试内存消耗.在这个测试应用程序中,我创建了四个持续消耗内存的进程,除非进程退出,否则这些进程不会释放内存.

我希望这个测试应用程序消耗大部分RAM内存并导致其他应用程序减速或崩溃.但结果与预期不一样.以下是代码:

 #include <stdio.h>
 #include <unistd.h>
 #include <list>
 #include <vector>

 using namespace std;
 unsigned short calcrc(unsigned char *ptr, int count)
 {
     unsigned short crc;
     unsigned char i;

     //high cpu-consumption code 
     //implements the CRC algorithm
     //CRC is Cyclic Redundancy Code
 }


 void* ForkChild(void* param){
    vector<unsigned char*>  MemoryVector;
    pid_t PID = fork();
    if (PID > 0){
        const int TEN_MEGA = 10 * 10 * 1024 * 1024;
        unsigned char* buffer = NULL;
        while(1){
            buffer  = NULL;
            buffer = new unsigned char [TEN_MEGA]; …
Run Code Online (Sandbox Code Playgroud)

c++ linux memory performance process

3
推荐指数
1
解决办法
264
查看次数

Linux getrusage() maxrss 最大驻留集大小不随分配增加(C++)

我正在尝试使用getrusage(.)和最大驻留集大小 (maxrss) 来检查内存泄漏。但是,当我故意尝试造成泄漏时,maxrss 不会改变。也许我对 maxrss 的理解不够深入。这是代码:

#include <iostream>
#include <sys/time.h>
#include <sys/resource.h>
using namespace std;
int main() {
  struct rusage r_usage;
  getrusage(RUSAGE_SELF, &r_usage);
  cout << r_usage.ru_maxrss << "kb\n";
  cout << "Allocating...\n";
  int a = 100000; // have tried range of numbers
  int* memleaktest = new int[a]; // class member
  if(!memleaktest)
    cout << "Allocation failed";
  getrusage(RUSAGE_SELF, &r_usage);
  cout << "after allocation " << r_usage.ru_maxrss << "kb\n";
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

allocatoin (~15000kb) 后我得到完全相同的值。在 Ubuntu x86 上。

c++ linux memory getrusage

3
推荐指数
1
解决办法
752
查看次数

new []初始化内置函数数组吗?

new[]在C++中使用是否将分配的数组初始化为全零?

c++ initialization new-operator built-in-types

0
推荐指数
1
解决办法
171
查看次数

使用delete []后元素仍然保留

我的代码是:

#include <iostream>
using namespace std;

int main() {
    // your code goes here

    int* a;

    a = new int[5];
    for(int i = 0; i < 5; i++)
        cin>>a[i];

    for(int i = 0; i < 5; i++)
        cout<<a[i]<<" ";

    delete[] a;
    cout<<"NEW MEM  ";
    a = new int[5];
    for(int i = 0; i < 5; i++)
        cout<<a[i]<<" ";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

INPUT:1 2 14 4 5和OUTPUT:1 2 14 4 5 NEW MEM 0 0 14 4 5

请解释为什么我没有得到OUTPUT:1 2 14 …

c++

0
推荐指数
1
解决办法
58
查看次数

有多少新的内存初始化对象?

我们知道malloc给出了unintialize内存,而calloc用零初始化内存.那么c ++中的新运算符给出什么值时初始化对象?

c++

-2
推荐指数
1
解决办法
141
查看次数