2014-04-13 92 views
0

我想要寫,其處理一個字符串,它看起來像這樣的函數:c更改指針在函數

| 1,2,3,4 |(1-> 2),(2- > 3),(3-> 1)|

結果應該是一個打破串分解成這些字符串:

  • (1-> 2)
  • (2-> 3)
  • (3-> 2)

這是我的代碼:

int processPart(char*** dest, char* from) //Processes a half at a time 
{ 
    int len = 0; 
    char* cutout = strtok(from, ","); 
    while(cutout) 
    { 
     (*dest) = (char**)realloc(dest, (len + 1) * sizeof(char*)); <<<<<<< 
     (*dest)[len] = (char*)calloc(strlen(cutout) + 1, sizeof(char)); 
     memcpy((*dest)[len], cutout, strlen(cutout)); 
     cutout = strtok(NULL, ","); 
     len++; 
    } 
    return len; 
} 

void processInput(char*** vertices, char*** edges, char* input, int* sizev, int* sizee) 
{ 
    int vlen = 0, elen = 0; 
    char* string = input + 1; 
    char* raw_vertices; 
    char* raw_edges; 
    string[strlen(string)] = '\0'; 
    raw_vertices = strtok(string, "|"); 
    raw_edges = strtok(NULL, "|"); 
    *sizev = processPart(vertices, raw_vertices); //First the vertices 
    *sizee = processPart(edges, raw_edges); //Then the edges 
} 

int main() 
{ 
    char* in = stInput(); //input function 
    char** c = NULL, **b = NULL; 
    int a, d, i; 
    processInput(&c, &b, in, &a, &d); 
    for(i = 0; i < a; i++) 
    { 
     printf("%s\n", c[i]); 
    } 
    printf("++++++++++++++++"); 
    for(i = 0; i < d; i++) 
    { 
     printf("%s\n", b[i]); 
    } 
    return 0; 
} 

然而,我在由< < < < < < <

標誌着線得到堆的腐敗

任何人都知道我的錯誤是什麼?

+1

嗨。要求人們發現代碼中的錯誤並不是特別有效。您應該使用調試器(或者添加打印語句)來分析問題,追蹤程序的進度,並將其與預期發生的情況進行比較。只要兩者發生分歧,那麼你就發現了你的問題。 (然後,如果有必要,你應該構造一個[最小測試用例](http://stackoverflow.com/help/mcve)。) –

+0

我確實發現了錯誤 - 正如前面提到的那樣,它出現在特定的行上。我只是不知道什麼是錯誤以及如何正確執行。 – Sunspawn

+1

您確實發現了*症狀*。但是現在您需要向後查找該症狀的實際原因。 –

回答

1

在錯誤路線

 (*dest) = (char**)realloc(dest, (len + 1) * sizeof(char*)); 

一個*dest參數之前丟失。如果你沒有用無用的演員混淆表情,你會發現這更容易。我會寫

 *dest = realloc(*dest, (len + 1) * sizeof**dest); 

- 這樣我們可以更好地看到賦值的第一個參數和左操作數的匹配。