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

标签 c

<分区>

我编写了这个简单的代码来测试我拥有的更大的实现,但我得到了垃圾值和段错误。一种解决方案是将 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);

}

最佳答案

您应该将指向指针的指针作为参数传递给 fill 函数,这样您就可以有效地修改指针 ab

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

fill(&a,&b);

关于c - 尝试打印垃圾值和段错误时出现垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54325322/

相关文章:

c - 十六进制 IP 到十进制 IP 转换

c - 随机数生成-未声明的标识符

c - Strcmp 生成核心转储

c - 为什么 gcc 以不同的方式编译 f(1199) 和 f(1200)?

c - c中字符串数组的函数

c - Objective C 中的数学

C Blackjack Lab,指针问题

c - 如何在 Mac OS X 上设置 libusb?

c - 套接字编程(客户端-服务器 UDP)

c - 在 C 中,我如何从文件中扫描并与另一个扫描进行比较