Arrays Mallocing一个无符号字符数组来存储整数

Arrays Mallocing一个无符号字符数组来存储整数,arrays,char,segmentation-fault,malloc,typedef,Arrays,Char,Segmentation Fault,Malloc,Typedef,当我测试下面的代码时,我总是遇到一个分段错误。我在网上搜索后,目前找不到答案 a = (byte *)malloc(sizeof(byte) * x ) ; for( i = 0 ; i < x-1 ; i++ ) { scanf("%d", &y ) ; a[i] = y ; } A具体化如下 byte *a ; 如果需要查看整个代码,请执行以下操作: #include <stdio.h> #include <stdlib.h> #include

当我测试下面的代码时,我总是遇到一个分段错误。我在网上搜索后,目前找不到答案

a = (byte *)malloc(sizeof(byte) * x ) ; 

for( i = 0 ; i < x-1 ; i++ )
{
scanf("%d", &y ) ;
a[i] = y ;
}
A具体化如下

byte *a ;
如果需要查看整个代码,请执行以下操作:

#include <stdio.h>
#include <stdlib.h>
#include "sort.h"

int p_cmp_f () ;

int main( int argc, char *argv[] ) 
{
  int x, y, i, choice ;

  byte *a ;

  while( choice !=2 )
    {
      printf( "Would you like to sort integers?\n1. Yes\n2. No\n" ) ;

      scanf("%d", &choice ) ;

      switch(choice)
    {
    case 1:
      printf( "Enter the length of the array: " ) ;

  scanf( "%d", &x ) ;

  a =  (byte *)malloc(sizeof( byte ) * x ) ;

  printf( "Enter %d integers to add to the array: ", x ) ;

  for( i = 0 ; i < x -1 ; i++ )
    {
    scanf( "%d", &y ) ;

    a[i] = y ;
    }
  switch( choice )
    {
    case 1:
      bubble_sort( a, x, sizeof(int), p_cmp_f ) ;

      for( i = 0 ; i < x ; i++ )
    printf( "%d", a[i] ;


      break ;

    case 2:
      selection_sort( a, x, sizeof(int),  p_cmp_f ) ;

      for( i = 0 ; i < x; i++ )
    printf( "%d", a[i] ;


      break ;

    case 3:
      insertion_sort( a, x, sizeof(int), p_cmp_f ) ;

      for( i = 0 ; i < x ; i++ )
    printf( "%d", a[i] ;


      break ;

    case 4: 
      merge_sort( a, x, sizeof(int), p_cmp_f ) ;

      for( i = 0 ; i < x ; i++ )
    printf( "%d", a[i] ;

      break ;

    case 5:
      quick_sort( a, x, sizeof(int), p_cmp_f ) ;

      for( i = 0 ; i < x ; i++ )
    printf( "%d", a[i] ;


      break ;

    default:
      printf("Enter either 1,2,3,4, or 5" ) ;

      break ;
    }
    case 2:
      printf( "Thank you for using this program\n" ) ;

      return 0 ;

      break ;

    default: 
      printf( "Enter either 1 or 2: " ) ;

    break ;
    }
}
  free(a) ;

  return 0 ;
}

int p_cmp_f( byte *element1, byte *element2 )
{
  return *((int *)element1) - *((int *)element2) ;
}
#包括
#包括
#包括“sort.h”
int p_cmp_f();
int main(int argc,char*argv[])
{
int x,y,i,选择;
字节*a;
while(选项!=2)
{
printf(“是否要对整数排序?\n1.是\n2.否\n”);
scanf(“%d”,选择(&C);
开关(选择)
{
案例1:
printf(“输入数组的长度:”);
scanf(“%d”和&x);
a=(字节*)malloc(大小f(字节)*x);
printf(“输入%d个整数以添加到数组:”,x);
对于(i=0;i
运行该代码时,我遇到了一个调试异常,因为没有定义选择的初始值,您应该添加

choice = 0;
在while循环之前。还有以下语句:

for( i = 0 ; i < x -1 ; i++ )
for(i=0;i
应该是:

for( i = 0 ; i < x; i++ )
(i=0;i 如果您使用的编译器检测到未初始化的内存,则这两种情况中的任何一种都可能导致异常。在进行这些更改后,在Visual Studio 2010下,它对我来说运行良好。我还建议为您的编译器启用最大警告级别,它可能会出现第一种情况

我不确定这是否是您想要的,但在内部case语句的嵌套case中,最后一个中断丢失了,因此它总是转到“感谢您使用此程序”部分,而不是循环返回另一个选择。另外,因为return语句用于退出函数,而不仅仅是允许它自由下降到底部(a)从未接到过电话


我建议不要将案例嵌套为两个函数,而是将顶层案例保留在原来的位置,然后使用类似perform_sort的函数,该函数有一个案例根据用户输入进行正确排序。这将使所有内容更易于理解,您也可以在调用该函数后打印结果,而不是重复g循环以打印结果。

运行该代码时,我遇到了一个调试异常,因为没有定义选择的初始值,您应该添加

choice = 0;
在while循环之前。还有以下语句:

for( i = 0 ; i < x -1 ; i++ )
for(i=0;i
应该是:

for( i = 0 ; i < x; i++ )
(i=0;i 如果您使用的编译器检测到未初始化的内存,则这两种情况中的任何一种都可能导致异常。在进行这些更改后,在Visual Studio 2010下,它对我来说运行良好。我还建议为您的编译器启用最大警告级别,它可能会出现第一种情况

我不确定这是否是您想要的,但在内部case语句的嵌套case中,最后一个中断丢失了,因此它总是转到“感谢您使用此程序”部分,而不是循环返回另一个选择。另外,因为return语句用于退出函数,而不仅仅是允许它自由下降到底部(a)从未接到过电话


我建议不要将案例嵌套为两个函数,而是将顶层案例保留在原来的位置,然后使用类似perform_sort的函数,该函数有一个案例根据用户输入进行正确排序。这将使所有内容更易于理解,您也可以在调用该函数后打印结果,而不是重复g循环以打印结果。

你能显示a是如何声明的吗?如果a声明为字节以外的任何内容,你将无法分配足够的空间。这应该是可以的。还要检查y是否声明为int。对于出现的其他人,可能值得在你的问题中添加额外的代码。你能显示a是如何声明的吗?如果a是declar除字节外的任何内容都会被删除,您将无法分配足够的空间。这应该没问题。还要检查y是否声明为int。对于其他人来说,在您的问题中添加额外的代码可能是值得的。谢谢您的帮助,但我仍然会遇到一个分段错误。只是现在它位于最后一个条目上。我刚刚添加了一些建议ns,不确定它是否会修复它,但这样分解代码将更容易理解并确保内存得到释放。感谢您的帮助,但我仍然遇到了一个分段错误。只是现在它位于最终条目上。我刚刚添加了一些建议,不确定它是否会修复它,但这样分解代码将使它更容易遵循并确保释放内存。