C程序不断崩溃

标签 c gcc crash

好吧,我有这个简单的代码,它询问用户他想保存多少个数字,然后询问数字,每次用户输入数字时,程序打印他已经输入的数字并对数字进行排序从最低到最高。

问题是当用户告诉程序保存超过 9 个数字时,程序就停止了,如果用户选择保存 8 个或更少的数字,它就完美了。我不知道发生了什么,我会感谢你的帮助

变量和其他术语基于我的语言,西类牙语,这里有一些翻译:

函数guardaNum:保存数组中的数

函数 ordena:对数组的数字进行排序

函数 imprime:打印数组

contador:是一个计数器

cant: 是用户想要保存的数量

感谢您的帮助!

#include <stdio.h>
int guardaNum(int *pnum,int lista[],int *pcontador);
int ordena(int lista[],int *pcontador);
void imprime(int lista[],int *pcant);

int main(void)
{
  int cant, num, *pnum, lista[cant], i,contador,*pcontador ;
  printf("Ingrese la cantidad de numeros que desea agregar a la lista: \n");
  scanf("%d", &cant);

  for(i=0;i<cant;i++)
    {
      lista[i]=-99;
    }

  for(i=0;i<cant;i++)
    {
      printf("Ingrese un Numero: ");
      scanf("%d",&num);

      pnum=&num;
      contador=i;
      pcontador=&contador;

      guardaNum(pnum,lista,pcontador);
      ordena(lista,pcontador);
      imprime(lista,pcontador);
    }

}

int guardaNum(int *pnum,int lista[],int *pcontador)
{
  lista[*pcontador]=*pnum;
  return 0;

}

int ordena(int lista[], int *pcontador)
{
  int i,j, temp;

  for(j=0;j<*pcontador;j++)
    {
      for(i=0;i<*pcontador;i++)
    {

      if(lista[i]>lista[i+1])
        {
          temp=lista[i+1];
          lista[i+1]=lista[i];
          lista[i]=temp;
        }
    }
    }
}

void imprime(int lista[],int *pcontador)
{
  int i;
  for(i=0;i<=*pcontador;i++)
    {
      printf("%d\n",lista[i]);
    }
}

最佳答案

这样做:

int main(void)
{
  int cant, num, *pnum, i,contador,*pcontador ;
  int *lista;
  printf("Ingrese la cantidad de numeros que desea agregar a la lista: \n");
  scanf("%d", &cant);
  lista = malloc(sizeof(int)*cant);
  if(!lista){
    perror("error on malloc");
    exit(1);
  }

  //continue with your code
  free(lista);
}

您的代码存在问题,无法未初始化,因此编译器不知道您的数组需要多少空间。

或者你可以这样做:

scanf("%d", &cant);
int lista[cant]
//continue with your code

关于C程序不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18217636/

相关文章:

c - 如何以正确的方式对链表进行排序 C

c - C 中确定文件的文件类型

c++ - 以下程序片段的可能输出?

c++ - g++ 默认启用 sse2 吗?

android - 在Android中,当应用程序在写入过程中发生崩溃时,文件会发生什么变化?

ios - NSMutablearray 崩溃删除对象

c - strtok 中的段错误

C 包含库失败

gcc - "gcc -s"和 "strip"命令有什么区别?

variables - Verilog分配给同一变量不起作用