进程已完成,退出代码为 -1073741571 (0xC00000FD)

问题描述 投票:0回答:2

练习的目的是分配tartar三角形的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;
}
c pointers
2个回答
0
投票

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


0
投票

所以,我拿了塔尔塔利亚的三角形,我打开VS Code,我写了一个算法(现在是晚上,我是初学者,不要尖叫)。我希望它可以帮助你。

代码前的几个注释:

  1. 我使用方括号和数组运算,但你可以使用你喜欢的符号,它应该是一样的。
  2. 算法不会很好或最有效,但它有效。
  3. 程序创建一个 x*x 矩阵(动态分配数组到数组),然后将正确的数字放在正确的位置。
  4. tartaglia
    函数只分配需要的数字,但为了更简单的代码,您可以填充整个矩阵。
  5. 矩阵可以看成是头向右偏后看三角形,所以第一行基本对应三角形的右边;然而,
    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

}

如有任何疑问,请随时提出。

© www.soinside.com 2019 - 2024. All rights reserved.