进程已结束,退出代码为-1073741571(0xC 00000 FD)

w3nuxt5m  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(459)

这个练习的目的是分配牙垢三角形的n条线。我的想法是使用指针到指针来分配它。然而,当运行过程以这种方式结束:进程结束于
代码如下:

#include <stdio.h>
#include <stdlib.h>
int somma (int x) {
int sum=0;
for (int i=0; i<=x; i++) {
  x=x-i;
  sum+=x;
}
return sum;
} 

  void stampa (int **a, int x) {
    *(*(a+0)+0)=1;

    for (int j=1; j<x; j++) {
        *(*(a+0)+j)=0;
    }

    for (int i=1; i<x; i++) {
        *(*(a+i)+0)=1;
        for (int j=1; j<x; j++) {
            *(*(a+i)+j)=*(*(a+i-1)+j-1)+*(*(a+i-1)+j);
        }
    }
    for (int i=0; i<x; i++) {
        for (int j=0; j<=i; j++ ) {
            printf(" %3d", *(*(a+i)+j));

        }
        printf("\n");
    }
 }
int main() {
   int x, **mat=NULL;
   printf("Inserisci x:"); //insert x.
   scanf("%d", &x);
   int sum=somma(x);

 
   mat=(int**)malloc(sum*sizeof(int*));
   if (mat==NULL) {
       return 1;
   }
    stampa(mat, x); //print function.

  return 0;
}
pbpqsu0x

pbpqsu0x1#

既然您在上面的循环中声明了int i=0*(*(a+i-1)+j)不等于a[-1]吗?

2nc8po8w

2nc8po8w2#

所以,我用了塔尔塔利亚的三角形,我打开了VS代码,我写了一个算法(现在是晚上,我是个初学者,不要尖叫)。我希望它能帮助你。在代码之前有几个注意事项:
1.我使用方括号和数组算术,但你可以使用你喜欢的符号,它应该工作相同。
1.算法不会是伟大的或最有效的,但它的工作。
1.程序创建一个x*x矩阵(动态地将数组分配给数组),然后将正确的数字放在正确的位置。

  1. tartaglia函数只分配所需的数字,但为了更容易地编码,您可以只填充整个矩阵。
    1.矩阵可以被认为是在你的头向右倾斜后看三角形,所以第一行基本上对应于三角形的右边;然而,stampa函数打印的是实际的行,因此它对角地遍历矩阵。
    这是一个基本的程序,所以你有一个工作的基础。删除无用的,并根据需要修改它。
#include <stdio.h>
#include <stdlib.h>

void tartaglia(int **matrix, int x){
    int k=x-1; // I'm initializing only values I'll print, so the number of columns decreases for each row
    for (int i=1; i<x-1; i++){
        for (int j=1; j<k; j++){
            matrix[i][j] = (matrix[i][j-1]) + (matrix[i-1][j]); // sums the two values above in the triangle
        }
        k--;
    }
}

void stampa(int **matrix, int x){
    for (int line=0; line<x; line++){ //lines to print (go from 0 to x-1)
        int i = line;
        int j = 0;
        printf("\n");
        for (int z=0; z<=line; z++){ // z= numbers in each line
            printf("%d ", matrix[i][j]);
            i--;
            j++;
        }
    }
}

int main(){
    int x;
    //prompting input x, will be size of matrix (x*x)
    printf("Inserisci x:"); 
    scanf("%d", &x);

    //dynamically allocating pointer of pointers
    int **matrix = (int**) malloc(x*sizeof(int*));
    for (int i=0; i<x; i++){
        matrix[i] = (int *) malloc(x*sizeof(int));
        for (int j=0; j<x; j++){
            matrix[i][j] = 1; // just initializing the whole matrix
        }
    }

    tartaglia(matrix, x); //this function actually puts the values into the matrix
    stampa(matrix, x); //this function prints the values

}

如有疑问,请随时提出。

相关问题