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,不确定它是否会修复它,但这样分解代码将更容易理解并确保内存得到释放。感谢您的帮助,但我仍然遇到了一个分段错误。只是现在它位于最终条目上。我刚刚添加了一些建议,不确定它是否会修复它,但这样分解代码将使它更容易遵循并确保释放内存。