这会产生内存泄漏吗?

oka*_*ami 4 c++ string memory-leaks memory-management

void aFunction_2()
{
    char* c = new char[10];
    c = "abcefgh";
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 将:c = "abdefgh"存储在new char[10]

  2. 如果c = "abcdefgh"是另一个内存区域我应该解除它吗?

  3. 如果我想保存信息,char[10]我会使用一个函数strcpy来将信息放入char[10]

Zan*_*ynx 8

是的,这是一个内存泄漏.

是的,您可以使用strcpy将字符串放入已分配的char数组中.

由于这是C++代码,你不会做任何一个.你会使用std :: string.


And*_*rsK 6

void aFunction_2()
{
    char* c = new char[10]; //OK
    c = "abcefgh";          //Error, use strcpy or preferably use std::string
}
Run Code Online (Sandbox Code Playgroud)

1-请问:c ="abdefgh"是否在新char [10]内部分配?

不,您正在将指针从先前指向10个字节的内存位置更改为指向新的常量字符串,从而导致10个字节的内存泄漏.

2-如果c ="abcdefgh"是另一个内存区域,我应该解除它吗?

不,它没有在堆上分配,它在只读内存中

3-如果我想在char [10]内部保存信息,我会使用类似strcpy的函数将信息放在char [10]内部?

不确定你对'内在'的意思.当您使用new分配时,内存在堆中分配,并且在正常情况下,如果您提供指向内存块的指针,则可以从程序的任何部分访问.