首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常:分配变量时的分割错误

异常:分配变量时的分割错误
EN

Stack Overflow用户
提问于 2022-05-30 17:26:22
回答 1查看 24关注 0票数 0

我的代码编译得很好,在运行它时给出了想要的结果,但是如果我想调试它,这一行中有一个分段错误:(对不起,德语变量名)

代码语言:javascript
复制
(*pointer)[0]->gehalt = 2000;

有人知道怎么回事吗?

代码语言:javascript
复制
void add_record(Person ***pointer, int *lenght){

*lenght+= 1;

//allocate one new Person struct pointer or create the first one
if(*pointer == NULL)
    *pointer = malloc(1 * sizeof(Person*));
else
    *pointer = realloc(*pointer, (*lenght) * sizeof(Person*));

//return if realloc failed
if(*pointer == NULL){
    printf("No more Space available\n");
    return;
}

//give pointer the new value of the adress of array-pointer
pointer = &(*pointer);

//give the variable a value
(*pointer)[0]->gehalt = 2000;

//print the value
printf("gehalt: %d", (*pointer)[0]->gehalt);
}

我的程序的主要功能是:

代码语言:javascript
复制
int main(){
Person *(*array) = NULL;

Person ***pointer = &array;
int lenght = 0;

add_record(pointer, &lenght);

return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2022-05-31 04:35:22

一般来说,你似乎缺乏对指针的基本理解。这是:

pointer = &(*pointer);

绝对什么都不做。您也有太多的间接方向,而且您从不为Person本身分配空间,只为指向一个指针分配空间。

我建议您从以下(正确)代码开始,了解它所做的事情,然后修改它以实际执行您需要的操作。

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>

typedef struct {
  int gehalt;
} Person;

void add_record(Person **ptr, int *length)
{
  if (*ptr == NULL) 
    *ptr = malloc(sizeof(Person));
  else
    *ptr = realloc(*ptr, (*length + 1) * sizeof(Person));

  (*ptr + *length)->gehalt = 2000 + *length;
  *length += 1;
}

int main()
{
  Person *array = NULL;
  int length = 0;

  add_record(&array, &length);
  add_record(&array, &length);
  add_record(&array, &length);

  for (int j = 0; j < length; j++) {
    printf("%d: %d\n", j, array[j].gehalt);
  }

  return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72438049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档