C 指针初始化的不良初始化可能是什么后果



这个问题已经关闭,因为对某些人来说,这似乎不是一个真正的问题我从那以后更新了问题主体,这可能是有点现在好多了。但是,我希望大家都建议我如何改善这个问题,因为这是我的工作和对这一领域的研究。

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 中编程,以便您可以使用指针并停止滥用PC的MMU"。但是,如果有人想听到任何不同的想法。

哪种使用指针最合适的做法?

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

怎么了
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

最新更新