2016-05-31 14 views
0

這是我的問題:我必須爲學校製作此程序,並且我花了最後一個小時進行調試和搜索,並且沒有找到答案。使用引用參考的結構數組

我在我的main中有一個結構數組,我想給我的函數seteverythingup(通過引用調用)給出該數組,因爲在此函數中我從文件中讀取的字符串被拆分,並且我想寫它進入結構,但當strcpy與struct數組時,我總是得到一個SIGSEV錯誤。

這是我的主:

int main(int argc, char *argv[]) 
{ 
FILE* datei; 
int size = 10; 
int used = 0; 
char line[1000]; 
struct raeume *arr = (raeume *) malloc(size * sizeof(raeume*)); 
if(arr == NULL){ 
    return 0; 
} 
if(argc < 2){ 
    return 0; 
} 
datei = fopen(argv[1], "rt"); 
if(datei == NULL){ 
    return 0; 
} 
fgets(line,sizeof(line),datei); 
while(fgets(line,sizeof(line),datei)){ 
     int l = strlen(line); 
     if(line[l-1] == '\n'){ 
      line[l-1] = '\0'; 
     } 
      seteverythingup(&line,arr,size,&used); 

} 
ausgabeunsortiert(arr,size); 
fclose(datei); 
return 0; 
} 

,這是我的函數:

void seteverythingup(char line[],struct raeume *arr[], int size,int used) 
{ 
    char *token,raumnummer[5],klasse[6]; 
    int tische = 0; 
    const char c[2] = ";"; 
    int i=0; 
    token = strtok(line, c); 
    strcpy(raumnummer,token); 
    while(token != NULL) 
    { 
     token = strtok(NULL, c); 
     if(i==0){ 
      strcpy(klasse,token); 
     }else if(i==1){ 
      sscanf(token,"%d",&tische); 
     } 
     i++; 
    } 
    managesize(&arr[size],&size,used); 
    strcpy(arr[used]->number,raumnummer); 
    strcpy(arr[used]->klasse,klasse); 
    arr[used]->tische = tische; 
    used++; 
} 
+0

從技術上講,C沒有引用調用,只能按值調用。通過使用指向變量的指針,可以*通過引用來模擬*調用。 –

+1

至於你的問題,如果你的代碼不會導致編譯器給你錯誤或警告,你需要啓用更多的警告。 –

+0

您分配了一個指針數組,但指針指向的內容沒有空間。 – stark

回答

0

編輯:既然有更多的困惑我寫了一個小程序,工程出部分你遇到麻煩了。

#include <cstdlib> 

struct raeume { 
    int foo; 
    int bar; 
}; 

void seteverythingup(struct raeume *arr, size_t len) { 
    for (size_t i = 0; i < len; ++i) { 
     arr[i].foo = 42; 
     arr[i].bar = 53; 
    } 
} 

int main() { 
    const size_t size = 10; 
    struct raeume *arr = (struct raeume*) malloc(size * sizeof(struct raeume)); 

    seteverythingup(arr, size); 

    return 0; 
} 

所以基本上你的函數的簽名有點奇怪。 Malloc返回一個指向內存位置的指針。所以你真的不需要一個指向數組的指針。只需將你從malloc得到的指針傳遞給該函數,該函數就可以操作該區域。

原來的答案:

malloc(size * sizeof(raeume*)); 

這可能是給你一個很難的代碼的一部分。 sizeof返回一個類型的大小。你問sizeof指向你raeume結構需要的指針有多少個字節。你可能想要做的是要求結構本身的大小,併爲此分配大小乘以空間。因此,正確調用malloc將是:

malloc(size * sizeof(struct raeume)); 
+0

非常感謝您解決了一個問題,我甚至都不知道自己做得很好,但我仍然無法確定爲什麼當我給它我的功能。在我的主要工作完全正常,但在我的功能,它只是說:0xbaadf00d當我看看數組的內存 –

+0

好吧,沒關係,我只是想出了很多感謝! –

+0

好吧,太棒了。自從您要求更多幫助以來,我已經擴大了我的答案。請考慮將回答標記爲已回答。 – datosh