我在最后的回报中没有得到正确的回报值

时间:2014-03-30 15:23:39

标签: c

这是我的问题。我没有在我的代码中获得正确的char *返回值。以下是我的代码部分

主要功能:

int main(int argc, char *argv[]){
....
....
    while (counter < line_C){
        char* zzz = searcher(line_arr[counter], 0);
        prog_counter[prog_counter_C] = atoi(zzz);
        prog_counter_C++;
        counter++;
    }
}

zzz获取正确的指针,但该值似乎被覆盖。 这里有更多的代码片段来显示搜索器功能的运行时间。

char* searcher(char input[], int method){
    ...
    ...
    else if (strncmp(instruction,"ADD", 3) == 0)
        return ADD(passer, method, 0);
    ...
    ...
}

添加功能的代码段:

char* ADD(char input[], int method, int bytecount){
    switch(method){
    case 0:
        char wtf[2];
        char *returner = itoa(Parse_Prog_Count(input), wtf, 10);
        return returner;
        break;
}

Parse_Prog_Count函数的代码片段:

int Parse_Prog_Count(char input[]){
    ...
    ...
    return bytecount;
}

我确实尝试调试,我从Parse_Prog_Count获得正确的返回值,然后是ADD,但是当它从搜索者返回到main的最后一次返回时,该值是错误的。

我也尝试首先从ADD捕获值到搜索器以检查值,并且返回值仍然正确。这是我遇到问题的最后一步。 来自zzz的价值似乎有所改变。

1 个答案:

答案 0 :(得分:1)

您将wtf声明为堆栈上的局部变量,作用于ADD函数:

char* ADD(char input[], int method, int bytecount){
    switch(method){
    case 0:
        char wtf[2];
        char *returner = itoa(Parse_Prog_Count(input), wtf, 10);
        return returner;
        break;
}

然后在“* returner”中返回指向该堆栈内存的指针,当该函数退出并超出范围时,您的数据也是如此。所以,你的指针现在指向谁知道什么。