我覺得半推遲發佈,但是我不知道爲什麼我的程序是吹起來時,它讀取一個字符串從鍵盤文字(即然後將其分配給一個指針)。尷尬的錯誤讀取字符串文字時進入一個指針
經過一個多小時的調試,程序在從鍵盤讀取數據時不斷爆炸。
我試過一切來解決這個問題。將字符串初始化爲字符串文字(即編譯器說它對nullptr有問題)。這幾乎就像我在某個地方有一個無形的角色。如果有人能告訴我我做錯了什麼,我將不勝感激。
的main.cpp
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <iostream>
#include <fstream>
#include "protocol.h"
int main()
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
int menuChoice = 0;
char * fileName = nullptr;
char * byteArray = nullptr;
char * hexArray = nullptr;
int numberOfBytes = 0;
PrintMenu();
GetMenuChoice(menuChoice);
ExecuteMenuChoice(menuChoice, fileName, byteArray, hexArray, numberOfBytes);
return 0;
}
protocol.cpp
void GetFile(char * fileName)
{
//Prompt user for binary file
std::cout << "\nEnter filename: " << std::endl;
//Read in location of binary file
std::cin.ignore(std::cin.rdbuf()->in_avail());
std::cin.getline(fileName, 256);
std::cin.clear();
std::cin.ignore(std::cin.rdbuf()->in_avail());
}
protocol.h
#ifndef PROTOCOL_H
#define PROTOCOL_H
//Function declarations
void PrintMenu();
void GetMenuChoice(int &menuChoice);
void ExecuteMenuChoice(int menuChoice, char *& fileName, char *& byteArray,
char *& hexArray, int numberOfBytes);
void NewLine();
void ThankUser();
void ErrorMessage();
#endif
它不是一個字符串來釋放內存,除非它是一個字符串出現在源代碼中。 – 2013-03-07 02:11:31
你需要做'char fileName [255];'所以它有一個放置字符串的地方。 – Patashu 2013-03-07 02:12:15
我懷疑'std :: cin.getline(fileName,256);'馬上。但是你甚至不顯示它是如何被使用的。最小的例子重現問題在哪裏? – 2013-03-07 02:12:31