如何动态地为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
之类的东西-而且,没有new
和delete
,请使用malloc
和free
。还有calloc
和realloc
。如果
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/