chkstk崩溃

时间:2018-02-23 18:13:04

标签: c

我在Linux上编写了一个运行得很好的程序。当我在Windows上编译并运行代码时,它始终在同一位置崩溃,并且callstack的顶部为chkstk()。我在Code :: Blocks和VS2013中尝试了它们并且它们在同一地点崩溃,除了Code :: Blocks它是chkstk_ms()(假设这是MinGW版本?)。

在Linux和Code :: Blocks中使用-std=c11进行编译。

以下是相关代码:

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

#define LINE_SIZE 2097152

bool doUnescape = false;
int filesDehexed = 0;

void dehexFile(const char* filename);

int main(int argc, char *argv[])
{
    int files = 0;
    char* filenameList[argc];

    if(argc < 2) {
        printf("Please pass in a filename.\n");
        return 0;
    }

    if((argc == 2) && (strcmp("-u", argv[1]) == 0)) {
        printf("No filename was passed in.\n");
        return 0;
    } else if((argc == 2) && strcmp("-u", argv[1]) != 0) {
        filenameList[0] = argv[1];
        files = 1;
    }

    if(argc >= 3) {
        for(int i = 0, j = 0; i < argc; i++) {
            if(strcmp("-u", argv[i]) == 0) {
                doUnescape = true;
            } else if(i > 0) { //SHOULD be a file name
                filenameList[j] = argv[i];
                j++;
                files++;
            }
        }
    }

    printf("Dehexifying %d file%s...\n", files, files <= 1 ? "" : "s");
    for(int i = 0; i < files; i++) {
        dehexFile(filenameList[i]);
    }
    printf("...%d file%s dehexed\n", filesDehexed, filesDehexed <= 1 ? "" : "s");

    return 0;
}

void dehexFile(const char* filename)
{
...
}

调试时,两个(Code :: Blocks with MinGW; VS2013)指向dehexFile()的左括号(因此,甚至不是一行代码),每个变量都为chkstk()。在实际调用dehexFile()的地方高几行,我甚至用一个字符串常量替换了filenameList[i],看看是否可能只是使用来自char*的{​​{1}}来解决问题仍然做同样的事情。

这里发生了什么以及为什么在Windows上而不是Linux?

0 个答案:

没有答案