2014-09-23 20 views
0

我想不出爲什麼,但這個是我的代碼:違反試圖寫入地址0xFDFDFDFD

char expression[256] = {}; 
    cin >> expression; 
    cout << endl; 
    int** variableTable = NULL; 
    int numOfVals = getNumberOfVariables(expression); 
    variableTable = static_cast<int**>(calloc(numOfVals, sizeof(int*))); 
    for (int i = 0; i < numOfVals; i++) 
    { 
     variableTable[i] = static_cast<int*>(calloc(2, sizeof(int))); 
    } 
    fillPromoterTable(expression, variableTable, numOfVals); 

這是fillPromoterTable

void fillPromoterTable(const char* expression, int** variableTable, int numOfVals) 
{ 
    char promoter[15] = {}; 
    char *token; 
    char* expCpy = pcstrdup(expression); 
    for (int i = 0; numOfVals; i++) 
    { 
     token = strtok(expCpy, "+-*/"); 
     int nLen = istrlen(token); 
     for (int j = 0; j < nLen; j++) 
     { 
      if (isdigit(token[j])) 
       promoter[j] = token[j]; 
      if (isalpha(token[j])) 
       break; 
     } 
     variableTable[i][0] = atoi(promoter); 
     memset(promoter, '\0', 15); 
     token = strtok(NULL, "+-*/"); 
    } 
    free(token); 
    free(expCpy); 

} 

在這一行:

variableTable[i][0] = atoi(promoter); 

我收到一個錯誤,說我試圖寫地址0xFDFDFDFD 我無法弄清楚它爲什麼會發生我可以使用一些幫助。

+2

這看起來更象C比C++,你可能要更改標籤。 – 2014-09-23 19:28:58

+1

0xFDFD是Microsoft C++調試分配器用於標記分配之間的無人地面邊界的模式。因此,假設它是一個指針,並且對它進行解引用,則在分配結束之後解引用。 http://en.wikipedia.org/wiki/Magic_number_(programming) – 2014-09-23 19:31:24

+1

該值可能表示未初始化或懸空指針。 – 2014-09-23 19:31:25

回答

7

更改循環條件在功能fillPromoterTable

for (int i = 0; numOfVals; i++) 

要:

for (int i = 0; i < numOfVals; i++) 
+0

哦哇我不知道如何刪除「我<」沒有看到它..謝謝 – 2014-09-23 19:35:32