簡體   English   中英

C在函數中傳遞2d數組給出了分段錯誤

[英]C Passing 2d array in function gives me segmentation fault

我是初學程序員,我目前正在學習C.我要做的是從用戶讀取數組的維度,使用malloc創建數組然后在函數內傳遞創建的數組,該函數應該找到數組中每行的最小數量,並將其放在另一個數組中,它也將返回到主程序。 但是,只要數組傳遞給函數並且我嘗試使用它,我就會收到分段錯誤(核心轉儲)錯誤。 我知道錯誤在哪一行,但我找不到我犯的錯誤。 如果你們幫我一點點,我真的很感激。 這是代碼:

#include <stdio.h>
#include <stdlib.h>

int *pinfun(int **pin,int sizex,int sizey);

void main(void){
    int x,y,i,j;
    int **dipin;
    int *newpin;
    printf("Parakalw eisagetai tis diastaseis x,y tou pinaka:");
    scanf("%d %d",&x,&y);
    dipin =(int**) malloc(x*sizeof(int*));
        for(i=0;i<x;i++){
                *(dipin+i)=(int*) malloc(y*sizeof(int));
        }
        for(i=0;i<x;i++){
                for(j=0;j<y;j++){
                        printf("Parakalw eisagetai tin (%d,%d) timi tou pinaka:",i,j);
                        scanf("%d",((dipin+i)+j));
                }
        }
    newpin= pinfun(dipin,x,y);
    for(i=0;i<x;i++){
        printf("H elaxisti timi tis %dis grammis einai: %d",i,*pinfun);
    }
}

int *pinfun(int **pin,int sizex,int sizey){
    int i,j,min;
        int* retpin=malloc(sizeof(int)*sizex);
        for(i=0;i<sizex;i++){
                min=**pin;
                for(j=0;j<sizey;i++){
                        if(*(*(pin+i)+j) < min){
                            min =*(*(pin+i)+j);
                        }
                }
        *(retpin + i) = min;
        }
    return retpin;
}

代碼已修復。 錯誤在於scanf(“%d”,((dipin + i)+ j)); 線。 通過將其切換為scanf(“%d”,(*(dipin + i)+ j)),它就像一個魅力。 感謝您的時間。

代碼已修復。 錯誤在於:

scanf("%d",((dipin+i)+j));

通過切換到:

scanf("%d", (*(dipin+i)+j)) 

它就像一個魅力。 感謝您的時間。

當然還有一些其他的拼寫錯誤被提及,但那是造成分段錯誤的原因。

for(j=0;j<sizey;i++)

我沒有完成整個代碼,但這看起來很可疑

它應該是

for(j=0;j<sizey;j++)

讓你的代碼像是一樣可讀。

運用

pin[i] = *(p+i);

pin[i][j] = *(*(pin+i)+j);

按照Cool Guy的建議修復你的printf()。

printf("H elaxisti timi tis %dis grammis einai: %d",i,newpin[i]);

更改

for(j=0;j<sizey;i++)

for(j=0;j<sizey;j++)

printf("H elaxisti timi tis %dis grammis einai: %d",i,*pinfun);

printf("H elaxisti timi tis %dis grammis einai: %d",i,*(newpin+i));

要么

printf("H elaxisti timi tis %dis grammis einai: %d",i,newpin[i]);

使其更容易理解

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM