我測試下面的代碼時,我總是收到分段錯誤。在搜索網頁後,我目前無法找到答案。Mallocing unsigned char數組存儲整數
a = (byte *)malloc(sizeof(byte) * x) ;
for(i = 0 ; i < x-1 ; i++)
{
scanf("%d", &y) ;
a[i] = y ;
}
y和x都被初始化。 X是用戶確定的數組的大小。 分段錯誤是由倒數第二個到最後一個整數加起來的,我通過添加 printf(「roar」);然後將[i]設置爲y並一次輸入一個數字。 字節是一個unsigned char的typedef。
注:
#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) ;
}
你能展示a是如何聲明的嗎?如果a被聲明爲除了一個字節以外的任何東西,那麼您將不會分配足夠的空間。 – PeterJ
@PeterJ byte * a; –
這應該是好的。同時檢查y是否被聲明爲int。對於任何其他人來說,將額外的代碼添加到您的問題中可能是值得的。 – PeterJ