[如何动态地为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
函数将忽略free
指针,因此您不必为此担心。 NULL
当然,与C ++中一样,不要将for ( int i = 0; i < x; ++i )
free( array[i] );
free( array );
内存加倍。那很不好。 :)
因此,优良作法是在析构函数中运行动态内存de分配,以确保当实例不再在范围内时,释放由实例分配的任何动态内存。
构造函数和解构器概念仅在C ++中存在,而在C中不存在。