gpt4 book ai didi

C 在完成关闭函数时崩溃

转载 作者:行者123 更新时间:2023-11-30 18:40:08 25 4
gpt4 key购买 nike

我目前有一个基本的 C 程序,可以生成值并将其保存到结构内的数组中。每当调用基本函数时,程序就会崩溃。有谁知道这有什么问题吗?

#define SAMPLES 10   

struct values {
double values[SAMPLES],mean; } values;

int main()
{
struct values array[0];
setvals(array);
return 0;
}

void setvals(struct values array[0]){
int i;
for( i = 0 ; i < SAMPLES ; i++ ) {
array[0].values[i] = 2;
printf("struct val = %f\n",array[0].values[i]);
}
printf("exitingfunc");
}

我可以看到结构中的值被设置为 2,但是一旦打印“exitingfunc”,整个程序就会崩溃 - 我在编译时没有收到任何错误或警告。有什么想法为什么会发生这种情况吗?

任何和所有的帮助appriced,

谢谢,J

最佳答案

大小为 0 的非堆数组不是合法的标准 C。

(您是否正在查看编译器错误/警告输出?某些编译器会允许这样做,并且可能会或可能不会提示。)

堆上的分配可以取零并返回一个可以安全释放的指针值。它可能是 NULL 或有效的内存地址(您不允许访问)。

尽管在这里您实际上尝试使用数组中不存在的第一个(即索引为 0)元素。因此将其声明为只有一个元素。

struct values array[1];

当然,你声明一个单元素数组很奇怪。也许您打算稍后使用更大的数字。但是,如果您想要的只是能够更改值类型的变量,那么您应该学习如何将指针传递给变量(即变量的地址)以在函数中更改它们:

struct values a;
...
setvals(&a);
...
void setvals(struct values *a){ /* or struct values a[] or a[1] */
...
(*a).values[i] = 2; /* or pa->values[i] */

另请注意,当您使用数组表示法声明参数时,它仍然只定义一个指针。

关于C 在完成关闭函数时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161329/

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