C++ 为什么';t双指针修改表?
我有个问题 这是我的结构:C++ 为什么';t双指针修改表?,c++,c,C++,C,我有个问题 这是我的结构: typedef struct cell{ char *mot; char *traduction; struct cell *suivant; }cellule_t; 这是我调用函数remplissage_hachage int main() { char *buffer = "hello"; cellule_t **tabMajeur; tabMajeur = malloc(HASH_MAX * siz
typedef struct cell{
char *mot;
char *traduction;
struct cell *suivant;
}cellule_t;
这是我调用函数remplissage_hachage
int main()
{
char *buffer = "hello";
cellule_t **tabMajeur;
tabMajeur = malloc(HASH_MAX * sizeof(cellule_t *));
memset(tabMajeur,0 ,HASH_MAX);
FILE * file = fopen("fichier.txt","r");
remplissage_hachage(tabMajeur,"fichier.txt");
}
函数remplissage_hachage将tabmajer作为参数:
void remplissage_hachage (cellule_t **tabMajeur,char *nomFichier)
{
char string1[20];
cellule_t *copy;
unsigned int indice;
int boolean = 0;
char *string2, *string3;
cellule_t *c;
FILE *fichier= fopen(nomFichier,"r");
while(fgets(string1,100,fichier) != NULL)
{
string2 = strtok(string1,";");
string3 = strtok(NULL,";");
printf("string2 %s\n",string2);
printf("string3 %s\n",string3);
int indice = recherche(tabMajeur,string2,&boolean,c);
if(boolean != 1)
{
copy = tabMajeur[indice];
tabMajeur[indice] = creationCellule(string2,string3);
tabMajeur[indice]->suivant = copy;
}
}
}
问题是,在main中调用remplissage_hachage之后,tabmajer没有被修改,即使我已经将其作为指针传递。
你能解释一下为什么吗?你检查过那个布尔值了吗=1在调用recherche()之后? 另外,您不必要地打开了文件两次,一次在main()中,一次在remplissage_hachage()中
如果“boolean”的值正确,则另一个可能的失败点是while条件,如果文件为空,则该条件将失败。使用调试器在您认为修改数组的行上设置断点,并查看是否正确,如果不正确,请使用调试器找出原因。这就是调试器的用途。另外,3/4的MalCuxDead数组没有初始化,如果你中了彩票,这将导致未定义的行为、未初始化的指针引用和保证崩溃。避免双重标记C和C++,除非你有一个与两种语言的差异或交互有关的问题。这个问题我会坚持C++,如果没有更好的理由,比如避免“C++不必<代码> TyPufFraseCyt {…} CyreEnt; C++”。这两个标签都有原因吗?你是因为某种原因将它编译成C++吗?如果你分配了<代码> HasyMax *sieZof(CyeleSt**)< /Cord>字节指针,你认为需要用多少字节来设置0?代码>成员集(tabmajer,0,HASH_MAX)代码>比分配的字节少8倍。要开始,请使用
std::vector
,并避免malloc
和new
。这更像是一个注释,而不是答案。你还没有发表评论的能力,你可以为此感谢垃圾邮件发送者,但不幸的是,不回答会进一步推动你获得这种特权。你可以把你的建议变得更具体,并解释你为什么提出这些建议,从而挽救这个答案