异常:分配变量时出现分段错误



我的代码编译得很好,运行时会给出想要的结果,但如果我想调试它,这一行中有一个分段错误:(抱歉使用德语变量名)

(*pointer)[0]->gehalt = 2000;

有人知道出了什么问题吗?

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 availablen");
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);
}

我的程序的主要功能:

int main(){
Person *(*array) = NULL;
Person ***pointer = &array;
int lenght = 0;
add_record(pointer, &lenght);
return 0;
}

通常,您似乎缺乏对指针的基本理解。此:

pointer = &(*pointer);

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

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

#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: %dn", j, array[j].gehalt);
}
return 0;
}

相关内容

  • 没有找到相关文章