【发布时间】:2011-02-20 11:53:57
【问题描述】:
更新: 在底部回答。
大家好,
如何初始化“指向结构的指针数组”?问题是,数组是一个成员变量,而在构造函数中传递给数组声明的大小是变量实体。
typedef struct Node {
string key;
int value;
struct Node * left;
struct Node * right;
}doubly;
class myHashStrKey{
private:
size_t hashsize;
doubly * table[];
public:
myHashStrKey(){
hashsize = ((size_t)-1);
doubly * table[hashsize];
memset(table,NULL,hashsize);// This is giving segmentation fault
}
};
//Called constructor; myHashStrKey sss = myHashStrKey();
在这里,我希望表是指向双节点的指针数组,并且我希望所有指针都初始化为 NULL 。这段代码有什么问题?还有什么其他更好的方法来执行上述操作?提前致谢。
更新:
经过讨论,考虑到尺寸太大,我修改了代码。但是如何用一定数量的 NULL 值填充向量表?我尝试了下面的代码,但它不起作用。
<pre><code>
for(int i =0;i < hashsize;i++){
table.push_back((doubly *)NULL);
}
table.insert(table.begin(),hashsize,NULL);
//Both give invalid static_cast from type `int' to type `doubly*'
</code></pre>
回答更新:
myHashStrKey::table(myHashStrKey::hashsize, static_cast(0));
myHashStrKey::table(myHashStrKey::hashsize);
//Above 2 does not work
for(int i =0;i != myHashStrKey::hashsize;i++){ //lesser than symbol spoils the display
myHashStrKey::table.push_back((doubly *)NULL);
}
//Above works
myHashStrKey::table.insert(myHashStrKey::table.begin(),hashsize,((doubly *)NULL));
//This too works
【问题讨论】:
-
这是您的实际代码吗?
hashsize = ((size_t)-1);你是怎么编译的? -
@Oli:那是铸造。这将编译!
-
它会编译并给出正确的值。
-
如果 0xFFFFFFFF 被定义为正确的,它会给出正确的值。我很想知道为什么下一行编译?
-
@bsoundra:正如@Nawaz 在现已删除的帖子中指出的那样,这将创建一个长度为 18446744073709551615 个元素的数组! (至少在 64 位机器上。)
标签: c++ multidimensional-array initialization private-members