C - 使用 malloc() 的分段错误(核心愚蠢)

阿兹玛奇

我有以下结构:

struct fibo_entry
{                          /* Definition of each table entry */
  int n;
  unsigned long long int lli;       /* 64-bit integer */
  char *str;
};

我正在尝试打印由参数传递的 X+1 斐波那契数的数字和字符串(数字转换为字符串)。我正在尝试str根据实际数字的小数位数动态创建空间

int main (int argc, char *argv[])
{
  int n;
  int i;
  struct fibo_entry *fibo_table;

  if (argc != 2)
    panic ("wrong parameters");

  n = atoi (argv[1]);
  if (n < 2)
    panic ("n too small");
  if (n > LIMIT)
    panic ("n too big");

    //Struct
    fibo_table = (struct fibo_entry*) malloc(sizeof(struct fibo_entry)*(n));
    //Fibonacci
    int var1 = 0;
    int var2 = 1;
    int aux = 0;
    for (i = 0; i<=n; i++)
    {
     fibo_table[i].lli = var1;
     if (var1 == 0){
        aux = 1;
     } else {
        aux = floor( log10( abs(var1)) + 1);
     }
     //When i use print no garbage chars...
     //printf("%d--> aux: %d var1: %d \n",i,aux,var1);
     //Generates the space of decimal we actually have on var1
     fibo_table[i].str = (char*)malloc(aux*sizeof(char));
     //Converts the number into string
     sprintf(fibo_table[i].str, "%llu", fibo_table[i].lli);
     aux = var1 + var2;
     var1 = var2;
     var2 = aux;
     fibo_table[i].n = i;
    }

  for (i = 0; i <= n; i++)
    {
      printf ("%d %llu %s\n", fibo_table[i].n, fibo_table[i].lli,
              fibo_table[i].str);
    }

  free_memory(fibo_table, n);

 return 0;
}

在这里,我试图解放记忆。

void free_memory(struct fibo_entry *table, int size)
{
    int i;
    for (i = 0; i<size;i++){
        free(table[i].str);
    }
    free(table);
}

输出:

0 0 ��X�U
1 1 1
2 1 1
3 2 2
4 3 3
5 5 5
6 8 8
7 13 13
8 21 21
9 34 34
10 55 55
11 89 89
12 144 144
13 233 233
14 377 377
15 610 610
16 987 987
17 1597 1597
18 2584 2584
19 4181 4181
20 6765 6765
Segmentation fault (core dumbed)

我的问题是我在 上得到了垃圾字符str = 0,我不明白为什么,当我这样printf("%d--> aux: %d var1: %d \n",i,aux,var1);时,我没有得到垃圾字符。为什么?另外,由于free(). 我做了一些研究,但没有发现任何东西,我已经尝试了不同的方法来释放内存:

free((*table)->str);
free(table[i]->str);
free(*(table+1)->str);
free(table[i].str);
威廉·珀塞尔

当然可能还有其他问题,但由于您只为n结构分配了空间,因此无法使用for (i = 0; i<=n; i++).

你需要少一个:

for (i = 0; i < n; i++)

尝试访问 fibo_table[n] 是未定义的行为。有效索引为 0 到 n - 1。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用malloc的C中的分段错误

来自分类Dev

使用 malloc'ed 字符串的 C 分段错误

来自分类Dev

使用一维数组的C malloc分段错误

来自分类Dev

C malloc 分段错误结构

来自分类Dev

尝试使用 (char**)malloc() 分配内存时出现分段错误(核心转储)

来自分类Dev

C - malloc 和结构,分段错误

来自分类Dev

malloc导致C中的分段错误

来自分类Dev

分段错误 C 数组和 Malloc

来自分类Dev

使用malloc时出现分段错误

来自分类Dev

使用C从核心转储获取导致分段错误的地址

来自分类Dev

C 中的分段错误(核心转储) - 使用 PTHREADS 时

来自分类Dev

使用 fscanf 时 C 中的分段错误(核心转储)

来自分类Dev

C - 使用带有大尺寸参数的 malloc 时出现分段错误

来自分类Dev

关于使用malloc和char数组指针的c中的分段错误

来自分类Dev

使用malloc的C语言中的错误:malloc.c:2451:sYSMALLOc“断言失败”

来自分类Dev

C ++中的Malloc错误?

来自分类Dev

输入数组较大时,C程序崩溃(分段错误)。在不使用static / global / malloc的情况下如何防止它?

来自分类Dev

C realloc() 无效指针错误即使使用了 malloc

来自分类Dev

对二维数组使用 malloc 时出现分段错误

来自分类Dev

使用malloc和别名时出现分段错误

来自分类Dev

在结构中的char *上使用malloc的分段错误

来自分类Dev

使用dlsym()对malloc / free进行存根会导致分段错误

来自分类Dev

即使我使用的是 malloc,strcpy 上的分段错误

来自分类Dev

C:在malloc()中使用getpagesize()

来自分类Dev

malloc()上的分段错误

来自分类Dev

malloc() 中的分段错误

来自分类Dev

由于我使用大量内存,导致分段错误(核心已转储)C ++

来自分类Dev

使用动态2D数组时的C ++分段错误(核心转储)

来自分类Dev

在C中使用getchar()时出现分段错误(核心转储)?

Related 相关文章

  1. 1

    使用malloc的C中的分段错误

  2. 2

    使用 malloc'ed 字符串的 C 分段错误

  3. 3

    使用一维数组的C malloc分段错误

  4. 4

    C malloc 分段错误结构

  5. 5

    尝试使用 (char**)malloc() 分配内存时出现分段错误(核心转储)

  6. 6

    C - malloc 和结构,分段错误

  7. 7

    malloc导致C中的分段错误

  8. 8

    分段错误 C 数组和 Malloc

  9. 9

    使用malloc时出现分段错误

  10. 10

    使用C从核心转储获取导致分段错误的地址

  11. 11

    C 中的分段错误(核心转储) - 使用 PTHREADS 时

  12. 12

    使用 fscanf 时 C 中的分段错误(核心转储)

  13. 13

    C - 使用带有大尺寸参数的 malloc 时出现分段错误

  14. 14

    关于使用malloc和char数组指针的c中的分段错误

  15. 15

    使用malloc的C语言中的错误:malloc.c:2451:sYSMALLOc“断言失败”

  16. 16

    C ++中的Malloc错误?

  17. 17

    输入数组较大时,C程序崩溃(分段错误)。在不使用static / global / malloc的情况下如何防止它?

  18. 18

    C realloc() 无效指针错误即使使用了 malloc

  19. 19

    对二维数组使用 malloc 时出现分段错误

  20. 20

    使用malloc和别名时出现分段错误

  21. 21

    在结构中的char *上使用malloc的分段错误

  22. 22

    使用dlsym()对malloc / free进行存根会导致分段错误

  23. 23

    即使我使用的是 malloc,strcpy 上的分段错误

  24. 24

    C:在malloc()中使用getpagesize()

  25. 25

    malloc()上的分段错误

  26. 26

    malloc() 中的分段错误

  27. 27

    由于我使用大量内存,导致分段错误(核心已转储)C ++

  28. 28

    使用动态2D数组时的C ++分段错误(核心转储)

  29. 29

    在C中使用getchar()时出现分段错误(核心转储)?

热门标签

归档