尝试打印时出现垃圾值和分段错误

中风

我写了这个简单的代码来测试我拥有的更大的实现,并且得到了垃圾值和段错误。一种解决方案是将int * a和int * b声明为全局变量并取出fill参数。我的问题是,两种情况下对内存处理的考虑是什么,为什么它会引发错误?

#include <stdio.h>
#include<stdlib.h>
#define LENGTH 4

void fill(int* a, int* b){
  a = (int*) malloc(LENGTH * sizeof(int));
  b = (int*) malloc(LENGTH * sizeof(int));

  for(int i=0; i< LENGTH;i++){
    a[i]=i;
    b[i]=i+10;
  }
 }

void printArray(int* a, int* b){
   for(int i = 0 ; i < LENGTH; i++)
    printf("%d\n",a[i] );

  for(int i = 0 ; i < LENGTH; i++)
    printf("%d\n",b[i] );
}

int main(){

    int* a;
    int* b;

    fill(a,b);
    printArray(a,b);

}
参观Grzegorz

您应该参数传递指针的指针的fill功能,因此可以有效地修改指针ab

void fill(int** a, int** b){
    *a = malloc(LENGTH * sizeof(int));
    (*a)[i]=i;

fill(&a,&b);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章