如何动态地为const char*数组分配内存?即,例如const char** array = /* ??? */。我知道malloc与C++中的new类似,但始终返回void*

更广泛地说,在C和C++中如何处理内存管理之间有什么区别?例如,在C语言中我需要提防别人可能不会想到的C++东西?

最佳答案

要分配数组,您可以执行以下操作:

const char **array = malloc( x * sizeof( char * ) );

然后分配数组的每个元素。
if ( array )
    for ( int i = 0; i < x; ++i )
        array[i] = malloc( y * sizeof( char ) );
else
    printf( "malloc failed :(" );
malloc返回void*,但它与其他指针类型兼容。

在C和C++中,您都需要自己管理内存,但是C没有unique_ptr之类的东西-而且,没有newdelete,请使用mallocfree。还有callocrealloc

如果malloc失败,它可以返回NULL,因此您也应该检查它。请注意,它不会像C++中的new那样抛出。有关malloc的更多信息,请参见here

根据要求,释放数组时,您基本上只是做相反的事情。注意 free 并没有大小,只是指针。 free函数将忽略NULL指针,因此您不必为此担心。
for ( int i = 0; i < x; ++i )
   free( array[i] );
free( array );

当然,就像在C++中一样,不要将free内存加倍。那很不好。 :)

关于c++ - C和C++中的内存管理有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59276714/

10-12 23:51