Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么这个C++;代码崩溃?_C++ - Fatal编程技术网

C++ 为什么这个C++;代码崩溃?

C++ 为什么这个C++;代码崩溃?,c++,C++,我试图在Windows7中运行这段代码,在它成功编译之后。你知道它为什么会崩溃吗?我给了它一个随机生成的二进制文件作为测试的输入,但一旦它开始,应用程序就会崩溃 #include <cstdio> #include <cstdint> using namespace std; long getFileSize(FILE *file) { long currentPosition, endPosition; currentPosition

我试图在Windows7中运行这段代码,在它成功编译之后。你知道它为什么会崩溃吗?我给了它一个随机生成的二进制文件作为测试的输入,但一旦它开始,应用程序就会崩溃

#include <cstdio>
#include <cstdint>
using namespace std;

long getFileSize(FILE *file) {
        long currentPosition, endPosition;
        currentPosition = ftell(file);
        fseek(file, 0, 2);
        endPosition = ftell(file);
        fseek(file, currentPosition, 0);
        return endPosition;
}

struct frame {
        uint8_t bytes[535];
};

struct spectralFrame {
        uint8_t bytes[512];
};

struct spectralFrameWord {
        uint16_t words[256];
};

int main() {
        char *filePath = "C:\\Payload\\Untitled.bin";
        uint8_t *fileBuffer;
        FILE *file = NULL;
        file = fopen(filePath, "rb");
/*      if((file = fopen(filePath, "rb")) == NULL)
                cout << "Failure." << endl;
        else
                cout << "Success." << endl;
*/
        long fileSize = getFileSize(file);
        fileBuffer = new uint8_t[fileSize];
        fread(fileBuffer, fileSize, 1, file);
        fclose (file);
        long frameCount = fileSize / 535;
        frame *frames = new frame[frameCount];
        for(int i = 0, j = 0, k = 0; i < fileSize; i++) {
                frames[j].bytes[k++] = fileBuffer[i];
                if((i % 534) == 0) {
                        j++;
                        k = 0;
                }
        }
        delete fileBuffer;
        fileBuffer = NULL;
        spectralFrame *spectralFrames = new spectralFrame[frameCount];
        for(int i = 0; i < frameCount; i++) {
                for(int j = 22, k = 0; j < 534; j++) {
                        spectralFrames[i].bytes[k++] = frames[i].bytes[j];
                }
        }
        delete frames;
        frames = NULL;
        spectralFrameWord *spectralFrameWords = new spectralFrameWord[frameCount];
        uint16_t word;
        for(int i = 0; i < frameCount; i++) {
                for(int j = 0, k = 0; i < 511;) {
                        word = spectralFrames[i].bytes[j++] << 8;
                        spectralFrameWords[i].words[k++] = word | spectralFrames[i].bytes[j++];
                }
        }
        delete spectralFrames;
        spectralFrames = NULL;
        filePath = "C:\\Payload\\Untitled.tsv";
        file = fopen(filePath, "w");
/*      if((file = fopen(filePath, "w")) == NULL)
                cout << "Failure." << endl;
        else
                cout << "Success." << endl;
*/
        for(int i = 0; i < 256; i++) {
                fprintf (file, "%u\t%u\n", i, spectralFrameWords[0].words[i]);
        }
        fclose (file);
        return 0;
}
#包括
#包括
使用名称空间std;
长getFileSize(文件*文件){
长电流位置,结束位置;
currentPosition=ftell(文件);
fseek(文件,0,2);
endPosition=ftell(文件);
fseek(文件,当前位置,0);
返回端位置;
}
结构框架{
uint8_t字节[535];
};
结构谱框架{
uint8_t字节[512];
};
结构谱框架词{
uint16_t字[256];
};
int main(){
char*filePath=“C:\\Payload\\Untitled.bin”;
uint8_t*文件缓冲区;
FILE*FILE=NULL;
file=fopen(文件路径,“rb”);
/*if((file=fopen(filePath,“rb”))==NULL)

不能如果你使用
new[]
你需要使用
delete[]
,而不是
delete
。我发现你的代码中有三条违反了这条规则。

如果你使用
new[]
你需要使用
delete[]<代码> >代码> >删除> <代码>。我看到代码中有三个违反此规则的情况。

看起来像是C代码而不是C++。除了新的[]删除[]尝试用ValGRN运行这个,它很可能会显示所有您所拥有的坏东西。

< P>看起来像C代码而不是C++。除了新的[]删除[]试着用ValGRing运行它,它很可能显示你所有的坏东西。< /P>不要链接到外部页面,包括问题中的代码。为什么你使用<代码> STDIO < /代码>而不是<代码> iSoRAM?永远不要在非const < Cal**/COD>中存储字符串文字。我建议使用实际的C++特性,如<代码>STD:/String >和<代码> STD::向量 .c,<代码>新< /代码>,以前没有见过C++以这种特殊方式使用……我真的是编写代码的新手。我不知道使用调试器。对不起,我使用的是代码> CSTDIO < /Cord>,因为我想利用<代码> Frad()函数,根据我正在阅读的文章,被推荐用于这个任务。不要链接到外部页面,包括问题中的代码。为什么使用<代码> STDIO < /C>而不是<代码> iSoRAM?永远不要在非const < Cal**/COD>中存储字符串文字。我建议使用实际的C++特性,如<代码> STD::ST。环<代码>代码> STD::向量 .C,代码< <新>代码>,以前没有见过C++以这种特殊方式使用……我真的是编写代码的新手。我不知道使用调试器。对不起,我使用的是代码> CSTDIO < /Cord>,因为我想利用<代码> Frad()
函数,根据我正在阅读的一篇文章,该函数被推荐用于该任务。