2015-12-22 108 views
2

我做了一個函數,加載行並將其保存到數組中,每當getline函數加載一個新行時,它就會進行dinamically分配,但是當我想要從數組中打印所有保存的行時,我的代碼結束了。你能告訴我問題在哪裏嗎?當我刪除功能,並把所有東西,它的工作正常。傳遞二維數組的字符作爲參數

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

void load(char **array,int *index) { 

     int riadok; 
     size_t len = 0; 
     char *buffer = NULL; 

     printf("Slova:\n"); 
     while((riadok = getline(&buffer,&len,stdin)) != -1) { 

      if (riadok == 1){ 
       break; 
      } 

      array = (char**) realloc (array, (*index + 1) * sizeof(char*)); 
      array[*index] = (char*) malloc ((riadok + 1) * sizeof(char*)); 
      strcpy(array[*index], buffer); 

      *index = *index + 1; 

     } 

    } 

int main() 
{ 

    int index = 0; 
    int i; 
    char **array = NULL; 

    load(array,&index); 

    for (i = 0; i < index; i++) 
    printf("%s",array[i]); 


    return 0; 
} 

回答

4

在C參數傳遞的價值。當您將main中的array傳遞給該函數時,它僅複製到函數load中的參數array。聲明

array = (char**) realloc (array, (*index + 1) * sizeof(char*)); 

將指針array修改爲新分配的內存。

main有了一些變化傳遞的array地址load功能

void load(char ***array, int *index) { // Use pointer to pointer to pointer 

    int riadok; 
    size_t len = 0; 
    char *buffer = NULL; 

    printf("Slova:\n"); 
    while((riadok = getline(&buffer,&len,stdin)) != -1) { 
     //printf("%d\n", riadok); 
     //printf("%s\n", buffer); 
     if (riadok == 1){ 
      break; 
     } 


     *array = realloc (*array, (*index + 1) * sizeof(char*)); 
     if(*array == NULL) 
      break; 

     array[0][*index] = malloc(riadok + 1); 
     if(array[0][*index]) 
      strcpy(array[0][*index], buffer); 
     //else 
     // printf("Memory Not allocated\n"); 


     *index = *index + 1; 
    } 
    free(buffer); 
} 

main稱呼其爲

load(&array,&index); 
+0

所以,在我的代碼我coppied陣列爲什麼它在致力於這就是功能我的功能和外部功能,它沒有工作,給了我分段故障,因爲我想打印數組,指出無處?不知道我是否理解正確。編輯代碼compilator給我3錯誤。 – kvway

+0

差不多。 'main'中的'array'指向'NULL',它不會被'load'函數修改。解引用它將調用未定義的行爲。 – haccks

+0

獲取3個錯誤:slova.c:18:68:錯誤:無效轉換從'void *'到'char **'[-fpermissive] * array = realloc(array,(* index + 1)* sizeof(char *)); ^ slova.c:19:63:錯誤:從'void *'無效轉換爲'char **'[-fpermissive] array [* index] = malloc((riadok + 1)* sizeof(char *) ); ^ slova.c:20:39:錯誤:無法將參數'1'轉換爲'char *'爲'char * strcpy(char *,const char *)' strcpy(array [*索引],緩衝區); – kvway