C 主阵列直方图
我正在编写一个非常简单的C程序,它从数组中构建一个直方图。特别是,它在第二个数组中写入第一个数组的ciphre,后跟它们出现的次数。例如:如果数组A是{2,3,2,5,6,6},那么A的数组直方图将是{2,2,3,1,5,1,6,3}。好的,所以我的程序编译得很好,没有任何警告或错误。但是程序在我插入数组A的值后停止工作。我在哪里失败了???谢谢C 主阵列直方图,c,arrays,histogram,C,Arrays,Histogram,我正在编写一个非常简单的C程序,它从数组中构建一个直方图。特别是,它在第二个数组中写入第一个数组的ciphre,后跟它们出现的次数。例如:如果数组A是{2,3,2,5,6,6},那么A的数组直方图将是{2,2,3,1,5,1,6,3}。好的,所以我的程序编译得很好,没有任何警告或错误。但是程序在我插入数组A的值后停止工作。我在哪里失败了???谢谢 typedef unsigned short int boolean; #define TRUE 1 #define FALSE 0 #include
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;
}
typedef无符号短整型布尔值;
#定义真1
#定义FALSE 0
#包括
#包括
#包括
#包括
布尔数组_直方图(int*A,int N,int**H,int*count){
int i,j;
布尔发现;
*H=(int*)malloc(sizeof(int)*2*N);
如果(*H==NULL)
返回FALSE;
(*计数)=0;
对于(i=0;imain中的变量H的类型错误。应声明:
int *H;
关于此,您需要再更改两行:
H = malloc( sizeof(int)*2*N );
及
另外,您只需要分配H一次。我不确定您想要实现什么,但您的问题是取消引用null
指针
H
是指向整数的双指针。因此,在使用*H
之前,必须使用malloc
将内存分配给H
int **H;
*H = malloc( sizeof(int)*2*N );
编辑:
建议您阅读一些关于指针的基础知识
您将为H分配两次内存(一次在main中,一次在func中)
H被声明为int**,内存被分配给每个整数指针的2*N个元素,这可能不是您想要做的。
如果您只希望输出为{2,2,3,1..},那么您可能只需要int*H
请正确缩进您的代码。我不打算按原样阅读它。还有..boolean
?!如果您真的想定义这样一种类型(为什么?),请像java.typedef unsigned short int int boolean之外的几乎所有语言一样使用bool
;这很有趣:Dboolean变量;然后用TRUE和FALSE grusel进行压缩。“If(find)”或“If”(!发现)”更具可读性抱歉,我无法缩进我的代码。显然这太难了。但是有问题。调试。正如你可能理解的那样,我不是一个专业的程序员,没有人真正教过我如何调试。我使用eclipse,但断点似乎有问题。它们不能像我预期的那样工作。而且在H的变量列表中,有这样一条消息:未能执行MI命令:-数据求值表达式*(*(H))调试器后端的错误消息:无法访问地址0x404008a1处的内存。我在internet上真的找不到这意味着什么。你能帮我吗?谁教这些难看的“大写字母”-变量名?!?请不要强制转换malloc()的结果;而且,&H
应该传递给ArrayHistogram
@Magnus我添加了两行需要更新的内容。
int **H;
*H = malloc( sizeof(int)*2*N );