我正在研究这个非常简单的C程序,它从数组中构建直方图。特别是它在第二个数组上写入第一个数组的ciphres,然后是它们出现的次数。例如:如果数组A是{2,3,2,5,6,6,6},则A的数组直方图将是{2,2,3,1,5,1,6,3}。好的,所以我的程序编译得很好,没有任何警告或错误。但是在我插入数组A的值后程序停止工作。我在哪里失败?谢谢!!
typedef unsigned short int boolean;
#define TRUE 1
#define FALSE 0
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <conio.h>
boolean Array_Histogram(int *A, int N, int **H, int *count){
int i,j;
boolean found;
*H = (int *) malloc( sizeof(int)*2*N );
if(*H==NULL)
return FALSE;
(*count)=0;
for(i=0;i<N;i++){
found=FALSE;
j=0;
while(found==FALSE && j<(*count)*2){
if(A[i]==(*H[j]))
found=TRUE;
else j+=2;
}
if(found==TRUE){
(*H)[j+1]++;
}
else{
(*H)[j] = A[i];
(*H)[j+1] = 1;
(*count) ++;
}
}
return TRUE;
}
int main(){
int N;
int count;
int *A;
int **H;
int *i;
i=0;
printf("Inserisci N, dimensione dell'array A:");
scanf("%d", &N);
if(N<=0){
return 0;
}
A= (int*) malloc (sizeof(int)*N);
*H = (int *) malloc( sizeof(int)*2*N );
for(count=0;count<N;count++){
printf("\n Inserisci il valore %d di A:", count);
scanf("%d", &A[count]);
}
Array_Histogram(A,N,H,i);
printf("\nI valori dell'istogramma sono:");
for(count=0;count<2*N;count++)
printf("\n %d", (*H)[count]);
return 0;
}
答案 0 :(得分:1)
main中的变量H的类型错误。应该声明:
int *H;
您需要在main中更改另外2行:
H = malloc( sizeof(int)*2*N );
和
Array_Histogram(A,N,&H,i);
此外,您只需要分配一次。
答案 1 :(得分:1)
我不确定你想要实现什么,但你的问题是解除引用null
指针。
H
是指向整数的双指针。因此,在使用H
malloc
将内存分配给*H
int **H;
*H = malloc( sizeof(int)*2*N );
编辑:
建议您阅读有关指针here
的一些基础知识答案 2 :(得分:0)