我有一個c函數,它使用malloc產生我的一個int數組。它的工作非常安靜,我認爲它的作用並不重要,因爲問題實際上與此無關。 (在這種情況下,它計算給定的int和base的數字)。我需要這個數組臨時在一個函數,這可能是一個子函數的子函數...(你有這個想法,指出這個函數可以使用多次),並在返回之前,我想運行免費,但它不起作用。這裏是一個測試代碼(它使用qsort對它們的二進制表示中的整數進行排序(是的,我知道可以更直接地計算結果,但重點是我嘗試運行free時遇到的問題(在功能上的人在這裏註釋掉))):C:由malloc函數產生的自由臨時數組
#include <stdio.h>
#include <stdlib.h>
int values[] = { 88, 56, 100, 2, 25, 0, 15};
int * baseString(int u, int base);
int abs(int a);
int ones(int a);
int cmpfunc (const void * a, const void * b)
{
return ones(*(int*)a)>ones(*(int*)b);
}
int main()
{
int n;
printf("Before sorting the list is: \n");
for(n = 0 ; n < 7; n++)
{
printf("%d ", values[n]);
}
qsort(values, 7, sizeof(int), cmpfunc);
printf("\nAfter sorting the list is: \n");
for(n = 0 ; n < 7; n++)
{
printf("%d (Ones=%d) ", values[n], ones(values[n]));
}
printf("\n");
return(0);
}
int abs(int a){
return (a<0)? a*-1:a;
}
int* baseString(int u, int base){
int* r=malloc(sizeof(int));
r[0]=base;
r[1]=1;
if(base<2){
r[2]=-1;
return r;
}
int negativ=0;
if(u<0){
u=abs(u);
negativ=1;
}
int i=2;
do{
int ur=u%base;
r[i]=ur;
u/=base;
i++;
}while(u>0);
r[1]=i-1;
if(negativ){
r[1]=-r[1];
}
return r;
}
int ones(int a){
int* ai=baseString(a, 2);
int a1=1;
for(int i=2; i<abs(ai[1]); i++){
if(ai[i]==1){
a1++;
}
}
if(!a){
a1=0;
}
//free(ai);
return a1;
}
PS:我安靜肯定這個線程是胎面的一些重複的地方,但我沒有發現它。
'abs'函數已經存在 –
BLUEPIXY
'int * r = malloc(sizeof(int));''r'只有一個元素。 – BLUEPIXY
它..「不起作用」? –