第929行xstring断言无效的空指针

时间:2013-12-03 21:18:07

标签: c++

当我在visual studio上调试它会运行但是当我运行.exe时,我收到以下错误:

c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ xstring 929行 表达式:无效的空指针

这是我的代码。

#include "stdafx.h"
#include <io.h>   //For access
#include <sys/types.h>  //For stat().
#include <sys/stat.h>  //For stat(). 
#include <iostream>
#include <string>
#include <direct.h>
#include <fstream>
#include <stdio.h>

using namespace std;

int _tmain(int argc, char* argv[]){

    string* argument = new string();
    string strPath = argv[1];
    argument = nullptr;
    argument = &strPath;

    if ( access( strPath.c_str(), 0 ) == 0 ){

        struct stat status;
        stat( strPath.c_str(), &status );

        if ( status.st_mode & S_IFDIR ){
            cout << "The directory exist." << endl;  
            getc(stdin);
        }
    }
    else{
        mkdir( "C:\\Program Files\\EZshred\\" );      
        getc( stdin );
    }

    return 0;
}

我尝试了一切,但我不知道还能做什么请帮助

1 个答案:

答案 0 :(得分:0)

这是一些更新的代码。由于除了strPath之外你从未真正使用strPath.c_str(),因此没有任何理由将其包含在string中。如果您要解析或拆分或添加它或其他什么,肯定string更适合一般用途,但在这种情况下,它实际上没有必要。也摆脱argument,因为它似乎没有必要。此外,你有问题地调用access(),第二个参数为零。恰好在Linux系统上将F_OK定义为零,但我不确定它是否保证在任何地方都如此。此外,由于您使用的是_tmain(),因此使用_TCHAR* argv[]也是明智的,特别是如果您正在构建Unicode或其他宽字符项目(尽管我远非权威的已经很久以前抛弃了M $ ......)。如果是这种情况,我不知道access()stat()等是否适用于非char类型,但我希望它们是......否则你需要先转换字符串...

#include "stdafx.h"
#include <io.h>   //For access
#include <sys/types.h>  //For stat().
#include <sys/stat.h>  //For stat(). 
#include <iostream>
#include <string>
#include <direct.h>
#include <fstream>
#include <stdio.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[]){

    // make sure we have at least argv[1] and that it is not NULL
    // (shouldn't happen in theory, but paranoia is good sometimes),
    // and that it does not point to an empty string
    if ( (argc < 2) || (argv[1] == NULL) || (*(argv[1]) == '\0') )
      return -1;            // probably should print an error message here

    if ( !access( argv[1], F_OK ) ){

        struct stat status;
        stat( argv[1], &status );

        if ( status.st_mode & S_IFDIR ){
            cout << argv[1] << "can be accessed and is a directory." << endl;  
            getc(stdin);
        }
    }
    else{
        mkdir( "C:\\Program Files\\EZshred\\" );      
        getc( stdin );
    }

    return 0;
}