我以为这已经被问了一百万次了,但我的搜索没有发现任何事情.
我可以安全地使用电子邮件地址作为linux目录名吗?换句话说,任何有效的电子邮件地址也是有效的目录名称?如果没有特别的字符,我必须先过滤?
我最近遇到了一个C++类,它实现了一个非零索引的数组.也就是说,可以将此类初始化为具有15..19的有效索引范围.此类计算索引为0的元素的地址,即使这可能超出分配的地址空间并存储该地址.然后使用此元素0地址通过operator []处理元素访问.一些示例代码(简化):
template <typename T>
class NonZeroArray
{
public:
NonZeroArray(int min_index, int size, T default_element) :
m_min_index(min_index),
m_size(size),
m_default_element(default_element)
{
m_base_address = (T*) malloc(size*sizeof(T));
m_zero_index_adress = m_base_address - min_index;
}
~NonZeroArray()
{
free(m_base_address);
}
T& element(int index)
{
if ( index < m_min_index || index >= m_min_index + m_size)
return m_default_element;
else
return m_zero_index_adress[index];
}
private:
int m_min_index;
int m_size;
T* m_base_address;
T* m_zero_index_adress;
T m_default_element;
};
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎不太复杂.我真的不明白为什么开发人员没有选择通过m_base_address [index + m_min_index]实现元素访问.但更糟糕的是,我担心目前的实施可能会很危险.代码似乎可靠地工作,但我想知道如果在m_zero_index_address的计算中存在算术溢出会发生什么,即如果最小索引偏移量大于allocatead地址.是否有可能出现可怕的错误,或者此代码是否始终安全?