进行指针操作时出现分段错误(核心转储)

问题描述 投票:0回答:2

尝试运行程序时出现分段错误(核心转储)。只是一些简单的指针操作,但我无法弄清楚问题所在。

int get_address_value(int* ptr) {
  return *ptr;
}

void put_value_to_address(int val, int* ptr) {
  *ptr = val;
}


int main(int argc, char* argv[]) {  
  int* ptr;
  put_value_to_address(400, ptr);
  printf("value in address is %d\n", get_address_value(ptr));

  return 0;
}
c pointers segmentation-fault coredump
2个回答
3
投票

您有一个未初始化的指针。访问该指针会导致未定义的行为。在您的情况下,未定义的行为表现为分段错误/错误。

在更改

ptr
中指向的值之前,您需要确保
put_value_to_address
指向有效的内容。

int* ptr = malloc(sizeof(int));

int i;
int* ptr = &i;

如果您使用

malloc
,请确保释放内存。添加

free(ptr);

main
结束之前。


0
投票

指针

ptr
未初始化,它包含一个垃圾值。这意味着它指向任意内存地址,您可能无法写入该地址。这就是导致分段错误的原因。

© www.soinside.com 2019 - 2024. All rights reserved.