使用 scanf 定义大小时出现段错误

问题描述 投票:0回答:1

我的代码有一个奇怪的问题: 我有一个生成动态结构数组的函数,只需要一个 int 大小作为参数。

在我尝试只添加一个 scanf("d";&size) 之前,它运行良好;选择我的数组的大小,不明白为什么我会出现段错误。

注意:如果我删除包含 scanf 的行,编译没有问题

pokemon_t * createPkmDatabase( int taille){
  printf("taille %d",taille);
  pokemon_t *tableau=malloc(sizeof(pokemon_t)*taille);
  ...
  ...
}

int main(){
/*"taille" means size in french */
    int taille=5;
    printf("Saisir taille : "); 
    scanf("%d",&taille); /* <-- BREAKS EVERYTHING */
    printf("valeur de taille : %d\n ",taille);
    pokemon_t *database=createPkmDatabase(taille);
}

我不明白为什么用简单的 scanf 改变“taille”的值会改变任何值。

它甚至似乎没有进入函数 bc 它甚至没有打印大小的值

arrays c segmentation-fault scanf structure
1个回答
0
投票

显示的代码没有错误。

一些备注:

  1. 使用正确的尺寸类型 (size_t)
  2. 始终检查 scanfmalloc
  3. 的结果
typedef struct {
    int x,y,z;
}pokemon_t; 

pokemon_t * createPkmDatabase(size_t taille){
  printf("taille %d",taille);
  pokemon_t *tableau=malloc(sizeof(*tableau)*taille);
  return tableau;
}

int main(){
/*"taille" means size in french */
    size_t taille;
    printf("Saisir taille : "); 
    if(scanf("%zu",&taille) == 1)
    { 
        printf("valeur de taille : %zu\n ",taille);
        pokemon_t *database=createPkmDatabase(taille);
        if(database)
        {
            printf("\nAllocation OK\n");
        }
        else
        {
            printf("\nAllocation FAILED\n");
        }
        free(database);
    }
}

https://godbolt.org/z/ExjYe5G94

© www.soinside.com 2019 - 2024. All rights reserved.