我在C++中看到有多种方式来分配和释放数据,我知道当你打电话给malloc你时应该打电话free,当你使用new操作员时你应该配对,delete将两者混合是错误的(例如,调用free()创建的东西)与new操作员),但我不知道何时应该使用malloc/ free何时应该在我的真实世界程序中使用new/ delete.
如果您是C++专家,请告诉我您在此方面遵循的任何经验法则或惯例.
我有以下问题:
如果我malloc在方法中return使用指向我的指针main,并free在我的main中使用指针,我是否已成功释放内存?如果我这样做,这是不好的编程风格吗?
int* mallocTest(int size)
{
int * array = (int*) malloc(size);
return array;
}
int main ()
{
int* pArray = mallocTest(5);
free (pArray);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:这个问题的主要目的是我想知道,如果我成功地释放了内存(如果我使用malloc-free / new []-delete []的正确“组合”),当我将其拆分为方法时和主要功能!
EDIT2:更改了代码和主题,以指向问题的预期要点
我继承了完全以32位运行的代码,但是当我将编译器更改为64位时,如果运行代码,则会出错.如果我执行代码,它(几乎总是)只是稍后失败.代码中有很多指针,C++不是我强大的套件.是否有人可以了解错误发生的原因?
我需要了解的是:首先创建BYTE***是否正常,然后BYTE**和BYTE*永远不会被分配给.我不明白这是如何工作的.我认为BYTE*会被分配到第一个,然后是BYTE**,然后是BYTE***.为什么这适用于x86,而不适用于x64?
void* AllocMemory(SIZE_T dwBYTEs)
{
void* result;
if (dwBYTEs > 0)
{
result = malloc(dwBYTEs);
if (result != NULL)
return result;
}
return 0;
}
BYTE** CreateBytes(int arg_0, int arg_4, int arg_8)
{
BYTE** hedi = (BYTE**)AllocMemory(arg_0 * 4);
if (!hedi)return 0;
hedi[0] = (BYTE*)AllocMemory(arg_0 * arg_8 * arg_4);
if (!hedi[0]) {
delete(hedi);
return 0;
}
for (int i = arg_0 - 1; i > 0; i--) {
hedi[arg_0 - 1 - i + 1] = &hedi[0][arg_4 * arg_8 …Run Code Online (Sandbox Code Playgroud)