gpt4 book ai didi

c - 从不同函数访问分配的数组时出现 SegFault

转载 作者:行者123 更新时间:2023-11-30 14:31:45 26 4
gpt4 key购买 nike

自从我用 C 编写代码已经一年了,但我不明白为什么会出现段错误

// Assume all imports are made

int printAgain(double** array, int size) {

int i = 0;
while(i < size) {
printf("Value: %f\n", *array[i]);
++i;
}

return 0;
}



int main(int argc, char *argv[]) {

int size = 10;

// Want an array of size 10 that contains doubles
double *array = malloc(size * sizeof(double));

if(array) {

int i = 0;
while(i < size) {

// Doing irrelavent stuff here

double value = 1.5; // 1.5 is random # I picked for this example
array[i] = value;

printf("Added to array: %f\n", array[i]);
++i;
}

printAgain(&array, size);

free(array);
return 0;
}
}

main 中的第一个打印语句工作正常,但在 printAgain 中它将打印数组的第一个元素,但在尝试打印第二个元素时出现段错误。

我相信我分配正确,将数组的位置分配给 for 循环中的值,然后将数组的地址发送到 printAgain 函数。在该函数中,我取消引用给定的地址以访问数组并打印其内容。我知道访问越界/非法内存空间时会发生段错误,但我不明白这是如何发生的,因为我“相信”我正确分配并将地址从 main 传递到数组。

我知道我错过了一些非常简单和基本的东西,但我想这就是一年不使用语言编码会给你带来的后果,对此感到抱歉。

最佳答案

main , array已经是一个指针了。你最好使用printAgain(array, size);来传递它而不是printAgain(&array, size); 。与之相关,您需要将函数装饰从 int printAgain(double **array, int size) 更改为至int printAgain(double *array, int size) .

int printAgain(double *array, int size) {
int i = 0;

while (i < size) {
printf("Value: %f\n", array[i]);
++i;
}

return 0;
}

int main(int argc, char *argv[]) {
int size = 10;
double *array = malloc(size * sizeof(double));

if (array) {
int i = 0;

while (i < size) {
double value = 1.5; // 1.5 is random # I picked for this example
array[i] = value;
printf("Added to array: %f\n", array[i]);
++i;
}

printAgain(array, size);

free(array);
return 0;
}
}

关于c - 从不同函数访问分配的数组时出现 SegFault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60124785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com