gpt4 book ai didi

c - 为什么这会给我一个段错误?

转载 作者:行者123 更新时间:2023-11-30 20:59:23 26 4
gpt4 key购买 nike

这是我的代码,我遇到了段错误,我不知道为什么...我正在创建一个网格,其中“n”是其大小,“tab”是一个数组,其类型是cellule :一个单元格有 2 个值。所以我在函数“creer_grille”中创建一个数组,我对其进行分配(大小可以是 4 6 或 8),并使用 -1 和 0 初始化单元格值。然后在下面的函数中我正在测试“creer_grille”功能。

typedef struct
{
int val;
int initial;
} cellule;

typedef struct
{
cellule *tab;
int n;
} grille;

grille *creer_grille(int n)
{
grille *g;
int i;

assert(n == 4 || n == 6 || n == 8 && "Taille de la grille différent de 4,6 ou 8");
g->n = n;
g = malloc(sizeof(int) * (n*n));
if (g->tab == NULL)
exit(-1);
for (i = 0; i < n*n; i++)
{
g->tab[i].val = -1;
g->tab[i].initial = 0;
}
return g;
}

void detruire_grille(grille * g)
{
free(g);
}

void test_creer_grille(){
int i,k;
for(k = 4; k <= 8 ; k+=2){
grille * g = creer_grille(k);
assert(g->n == k && "Problème dans le champ n de la grille");

//Vérification que les cellules sont vides
for(i = 0 ; i < k * k ; i++){
assert(g->tab[i].val == -1 && "Problème : cellule non vide !");
assert(g->tab[i].initial == 0 && "Problème : cellule initiale !");
}
detruire_grille(g);
}
printf("Test de la fonction creer_grille OK !\n");
}

int main()
{
test_creer_grille();
}

最佳答案

creer_grille 函数中,声明 g 指针。由于未初始化,因此会包含垃圾。

几行之后,您尝试访问 gn 成员 (g->n)。即使此时,您的 g 指针还没有初始化。因此,您尝试访问垃圾位置,这显然会导致段错误。

一个可能的修复方法是在使用 g 指针之前为其分配内存。

g = malloc(sizeof(格栅));

我怀疑您的编译器可能已警告您有关使用未初始化的变量。

关于c - 为什么这会给我一个段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com