对于C ++中指针的错误初始化会产生什么后果呢?

时间:2012-11-05 10:11:51

标签: c++ pointers initialization mmu

这个问题已被关闭,因为它没有向某些人提出真正的问题我从那时起更新了问题机构,现在可能会有所改善。但是,我希望大家都建议我如何改进这个问题,因为这是我在这方面的工作和研究。

RAII(资源分配是初始化)理论规定如果我从MMU借用内存,我需要将其返回(新的和删除)。但是,我想知道如果我在C ++中做错的初始化实践的话会有什么好处。

如果我执行以下操作该怎么办:

double* pp1 = 0;
double* pp2 = 0;

然后在我需要的地方使用pp1和pp2?这是根据标准编程实践初始化指针的错误方法吗?或者它是初始化。初始化完全取决于new运算符吗?

在设计中应该使用多少指针:

1)实时 2)安全性至关重要 3)关键任务

此外,我在32位和64位计算机上运行相同的C / C ++应用程序时发现了奇怪的结果。如果我搞乱指针,我的机器会变得很慢/表现不佳。因为在我的设计中使用了太多的指针,我的机器变慢了。对于一些“明显的”保密协议,我不能把我的代码放在这里。我很抱歉。为了澄清,我在返回结果之前删除了每个方法中使用的所有指针,即我的内存管理非常均衡和高效,不会导致堆栈溢出问题。

我知道这些问题可能过于开放,但我也在调查(Google,MISRA C ++,英国计算机协会和IEEE),以找出详细的答案。我的想法是实际研究和开发一种用C ++编程的方法,而不涉及很多指针。

我知道一个明显的答案是,“你用C ++编程,这样你就可以使用指针并停止滥用你电脑的MMU”。但如果有人有任何不同的想法,我想听听它。

1 个答案:

答案 0 :(得分:6)

  

哪种方法最适合使用指针?

在这种情况下,答案是根本不使用它们。只是

有什么问题
double p1 = 1.1;
double p2 = 2.2;

如果必须,请将它们包装在智能指针中:

使用智能指针防止内存泄漏:

std::unique_ptr<double> pp1;

如果必须使用原始指针(可疑),请初始化为nullptr

首选nullptr优先于NULL0

double* pp1 = nullptr;
double* pp2 = nullptr;

在指针指向有效位置之前,不能取消引用指针:

pp1 = new double(1.1);

*pp1; //VALID
*pp2; //UNDEFINED BEHAVIOR - pp2 is still nullptr