2013-10-23 41 views
1

我在采访中遇到了这个问题。我回答了如何分配100字节的内存

char *p = new char[100]; 

这是根据面试官错误。

有谁能告诉我什么是正确的方式,以及面试官的期望是什么?

+0

“如何分配...”有什么价值?分配总是伴随着分配一定的值。或者你的意思是分配?你显示的是分配一个100个字符的数组(通常是100个字节大),但是不给这个区域分配任何值 – codeling

+0

'memcpy(dest,src,100);' – keltar

+0

他可能意味着一个memset调用, 'memset(v,0,100)'。 – 2013-10-23 11:51:04

回答

3

你的回答是正确的。但是,它需要手动内存管理,因此容易出错。更C++ - Ÿ办法是

std::vector<char> buffer(100); 

或者的确,如果数字100是一个编译时间常数:

std::array<char, 100> buffer; 
// or 
char buffer[100]; 

最后,如果我们是在低级别的内存管理很感兴趣,这里是另一种方式:

std::allocator<char> alloc; 
char* buffer = alloc.allocate(100); 
+0

问题是使用新的。 –

+2

@DeveshAgrawal看起来不像那样,唯一的*“新”*问题在你的一行代码中。 – hyde

+0

我可以''删除'allocate'返回的指针吗? –

1

不知道在他的头上什么坐镇,他可能不知道,char保证具有同等大小在C++ 1(第5.3节。 3/1),并期待这样的:

void* mem = malloc(100); 

不过,在C++ vector可能会是首选。

或者他可能不希望你使用动态分配?

+0

面试问题总是很困难;没有上下文几乎任何单行可能意味着多个事情。 –

+0

@PP。是的,但如果面试官说这是*错误*,他可能意味着*不当行为*,而不仅仅是一种风格/成语问题。 –

相关问题