Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么';t双指针修改表?_C++_C - Fatal编程技术网

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
。这更像是一个注释,而不是答案。你还没有发表评论的能力,你可以为此感谢垃圾邮件发送者,但不幸的是,不回答会进一步推动你获得这种特权。你可以把你的建议变得更具体,并解释你为什么提出这些建议,从而挽救这个答案