c - 从不同函数访问分配的数组时出现 SegFault
问题描述
我用 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 传递给数组。
我知道我遗漏了一些非常简单和基本的东西,但我想这就是 1 年不使用语言编码对你造成的影响,对此我深表歉意。
解决方案
在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;
}
}
推荐阅读
- jquery - ajax成功后如何“添加到购物车”按钮更改文本“已添加”
- python - 修复按键重复 Python
- java - Android Firebase 推送通知自定义声音不起作用
- regex - 匹配前 20 个字符之后的所有字符?
- javascript - 负前瞻与未指定的 node_module 路径不匹配
- javascript - 有没有办法在 JavaScript 中重新声明现有函数的范围?
- javascript - 如何使用 Typescript 定义强类型电子邮件模板参数?
- reactjs - 在 React 中添加谷歌分析 gtag 代码片段
- javascript - 如何在 JavaScript 中将 CSS 代码转换为数组
- python - Python:给定一个用户列表,我需要编写一个函数,它以字符串形式返回所有用户的姓名和角色,每个值都标记为