【发布时间】:2017-02-14 01:30:33
【问题描述】:
这是我的结构:
struct HashTable{
int tsize;
int count; //No. of elements in table
struct HashTableNode **Table;
};
这就是我想要做的:
struct HashTable *h=(struct HashTable *)malloc(sizeof(struct HashTable));
if(!h) return NULL;
h->tsize=size/LOAD_FACTOR;
h->count=0;
h->Table=(struct HashTableNode**)malloc(sizeof(HashTableNode *)*h->tsize);//this line
我无法使用 new 运算符将最后一行转换为等效的 C++ 版本
解决了
我把代码改成了这样:
h->Table=new HashTableNode*[h->tsize];
for(int i=0;i<h->tsize;i++)
h->Table[i]=new HashTableNode;
我自己做了一些调试,瞧。解决了。
谢谢大家。
【问题讨论】:
-
首先在 C++ 中你应该避免使用指针。不用指针,你也可以过得很快乐,也能做出很好的程序。其次,如果你想在运行时创建一个数组,那么你应该使用
std::vector。 -
@LPs 他正在将 C 转换为 C++,这是两个标签都有效的罕见情况。
-
@Borgleader 同时删除 ;)
-
如果您仍然坚持使用指针,请向我们展示您尝试过的方法,并告诉我们它是如何奏效的。
-
@Olaf 那是一个可怕的哲学。 C++ 不会强迫您使用它的任何或全部功能。这是 C++ 社区中的一个瘟疫,“哦,你正在使用 C++,只需使用 C++ 特性”。 C++ 在很大程度上能够使用 C 代码做 C 可以做的任何事情,而且它仍然是 C++(它不会是“惯用的”C++,但它是 C++)。用指针没问题,用 memcpy 没问题,realloc 和 malloc 和 free 没问题。您最好知道自己在做什么,并能够回答他人,但使用这些工具也没问题。
标签: c++ c malloc new-operator