我的代码编译得很好,在运行它时给出了想要的结果,但是如果我想调试它,这一行中有一个分段错误:(对不起,德语变量名)
(*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 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);
}我的程序的主要功能是:
int main(){
Person *(*array) = NULL;
Person ***pointer = &array;
int lenght = 0;
add_record(pointer, &lenght);
return 0;
}发布于 2022-05-31 04:35:22
一般来说,你似乎缺乏对指针的基本理解。这是:
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: %d\n", j, array[j].gehalt);
}
return 0;
}https://stackoverflow.com/questions/72438049
复制相似问题