【问题标题】:cause for stack smashing detected error in C堆栈粉碎的原因检测到 C 中的错误
【发布时间】:2017-11-12 10:38:33
【问题描述】:

代码如下: 用于计算直角三角形的另外两条边,当给定一个cathetus(与直角相邻的边)时。

(我是 C 初学者)

int* pythagoreanTriple(int a, int *result_size){
// Complete this function

result_size[0]=a;
int sqa=a*a;
if(sqa%2)
    {result_size[1]=(sqa-1)/2;
    result_size[2]=result_size[1]++;
    }
else{
    int m=a/2;
    result_size[2]=m*m+1;
    result_size[1]=m*m-1;
}
return result_size;
}

int main() {
int a; 
scanf("%d", &a);
int result_size;

int* triple = pythagoreanTriple(a, &result_size);
for(int triple_i = 0; triple_i < 3; triple_i++) {
    if(triple_i) {
        printf(" ");
    }
    printf("%d", triple[triple_i]);
}
puts("");
return 0;
}

【问题讨论】:

  • 作为result_size 传递的值不是数组,而是用作。由于传递的值是堆栈分配变量的地址,因此堆栈被粉碎。

标签: c error-handling compiler-errors


【解决方案1】:

main 函数中,变量result_size 是单个int。您将指向该变量的指针传递给pythagoreanTriple 函数,在该函数中将其视为三个元素的数组。指针可以被视为一个数组,但只能是一个单个元素,它表示main函数中的变量。

如果它应该是一个树元素的数组,那么就这样定义它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多