Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 主阵列直方图_C_Arrays_Histogram - Fatal编程技术网

C 主阵列直方图

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

我正在编写一个非常简单的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 <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 );