相关疑难解决方法(0)

为什么我们在创建对象的时候要用对象的指针呢?

当我们想创建这样的新对象时,为什么要使用对象指针?

employee *Steve = new employee();
Run Code Online (Sandbox Code Playgroud)

在本例中,我想创建一个名为 的对象Steve

employee *Steve = new employee();
Run Code Online (Sandbox Code Playgroud)

c++ pointers class object

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

从堆栈分配的原始指针构造智能指针

有人可以告诉我这里发生了什么吗?

int* stackint = new int(5);

{
    std::unique_ptr<int> myInt(stackint);    
    *myInt = 8;

}

std::cout << *stackint; // 0
Run Code Online (Sandbox Code Playgroud)

这里到底发生了什么?我理解智能指针,当你用 new 或 make_unique 构造它们时,当你将堆栈指针传递给它们的构造函数时会发生什么?

c++ smart-pointers

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

只有栈可以存储局部(指针)变量,堆不行吗?

我是 C 和 C++ 新手。我知道每当调用一个函数时,它的变量都会在堆栈上分配内存,包括变量恰好是一个指针,该指针指向通过mallocor分配在堆上的数据new(但我听说不能保证malloc分配的存储100%在堆上,如果我错了,请纠正我)。例如,

\n
Void fn(){\n    Member *p = new Member()\n}\n \n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
Void fn() {\n        int *p = (int*) malloc( sizeof(int) * 10 );         \n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果我错了,请纠正,在这两种情况下,变量p(保存堆上分配的对象的地址)都在堆栈上,并且它指向堆上的对象。\n所以说所有的都正确吗?我们声明的变量位于堆栈上,即使它们可能指向堆上的某些内容?\n让\xe2\x80\x99s 说局部变量指针的地址p加载到内存地址001,它具有位于堆上的成员对象的地址,该地址是002。我们可以画这样的图。\n在此输入图像描述

\n

如果这是正确的,我的下一个问题是,我们是否可以拥有一个实际位于堆上的指针,并且它指向位于堆栈上的变量?如果不可能,该指针是否可以指向位于堆上的变量?\n也许这个问题的另一种表达方式是:为了访问堆中的某些内容,我们只能通过堆栈上的指针来访问它?\n可能的图表如下所示

\n

如果可能的话,我可以在这里举个例子吗?

\n

在此输入图像描述

\n

c c++ malloc heap-memory

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

这些场景中是否存在内存泄漏?

我正在努力调试几个小时后内存不足的大型c ++程序,这些场景中的任何一个都会造成内存泄漏吗?

场景1:使用&(没有delete或类似的东西):

inline int testFunc(std::vector<int>& peaksArray, int& tmp) {
for (int Index : peaksArray) 
{
tmp++
}
}
Run Code Online (Sandbox Code Playgroud)

场景2:使用char[](没有delete或类似的东西):

char debug[500];    
Run Code Online (Sandbox Code Playgroud)

我永远不会在我的程序中使用:

  • new
  • 用于搪塞 *
  • delete (也许我应该 ?)

谢谢你的回答,

问候

c++ memory-leaks

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

标签 统计

c++ ×4

c ×1

class ×1

heap-memory ×1

malloc ×1

memory-leaks ×1

object ×1

pointers ×1

smart-pointers ×1