我的c ++代码可以直接工作几次,经过几次执行后它突然停止工作并抛出异常(没有任何变化!),我无法弄清楚原因.
这是代码中有问题的部分:
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
TCHAR *path;
SHGetKnownFolderPath(FOLDERID_Startup, KF_FLAG_CREATE, NULL, &path);
lstrcat(path, L"\\calc.exe");
if (CreateProcess(NULL, path, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
Run Code Online (Sandbox Code Playgroud)
执行几次后,CreateProcess()行会抛出2个异常,第一个:
Unhandled exception at 0x779D8829 (ntdll.dll) in PS_Down.exe: 0xC0000374: A heap has been corrupted (parameters: 0x77A15890).
Run Code Online (Sandbox Code Playgroud)
第二:
Exception thrown at 0x77946111 (ntdll.dll) in PS_Down.exe: 0xC0000005: Access violation reading location 0x00000069.
Run Code Online (Sandbox Code Playgroud)
它发生在我的一些其他项目(不包括CreateProcess()函数)和iv'e注意到它总是发生在涉及TCHAR和SHGetKnownFolderPath()时.任何有助于理解如何解决问题的帮助将非常感谢,提前感谢!
PS - 我是cpp编码的新手,所以请尝试相应地解释
我知道在 C 中相邻的字符串文字是连接在一起的。我想知道,相邻的字符串文字是否与 char*s 连接?
我问这个问题的原因是因为我想将两个字符串的串联传递给perror(),并且其中一个字符串事先未知,所以我必须使用char*.
perror("error opening " "file.txt"); // string literals are concatenated
char* filename = "file.txt"; // or some other file
perror("error opening " filename); // will this work?
Run Code Online (Sandbox Code Playgroud) 我尝试使用递归创建二叉树,但是当我键入时ABD***CE**FG***,代码未产生任何结果。我按了空格键,但是代码仍然没有成功。代码是错误的还是我的输入错误?
#include <stdio.h>
#include <stdlib.h>
typedef struct tree
{
struct tree *left;
struct tree *right;
char val;
}treeNode;
void createTree(treeNode **node)
{
char value=0;
value=getchar();
if(value=='*')
*node=NULL;
else
{
*node = (treeNode*)malloc(sizeof(treeNode));
if(!*node) exit(-1);
(*node)->val=value;
createTree(&(*node)->left);
createTree(&(*node)->right);
}
}
void preOrder(treeNode *node)
{
if (node==NULL) return;
putchar(node->val);
preOrder(node->left);
preOrder(node->right);
}
int main() {
// insert code here...
treeNode **node;
createTree(node);
preOrder(*node);
return 0;
}
Run Code Online (Sandbox Code Playgroud) Windows上的C ++标准模板库(STL)是否不同于Linux或任何其他平台上的?STL的标头是否也随平台而不同,还是STL仅仅是标头库及其在CRT中的实现?
我们知道编译器随平台而异,C运行时库也随平台而异。事实证明,即使标准模板库(STL)与平台也不同吗?
请澄清这个疑问。
另外,在Windows上C ++ STL的名称是什么,在Linux上是什么?
我一直试图通过在线阅读各种文章并试图构想一个工作流程来更好地理解术语来理解这一点。
我对 C++ 相当陌生,正在开始我的主要大学项目。到目前为止一切都很顺利,但是我遇到了这个问题,经过几个小时的网络搜索后我仍然一无所知。
Portfolio::displayAccounts()当我尝试循环遍历向量以显示向量内的每个元素时,就会出现问题。
它不允许我使用std::cout <<我一直用于数组之类的东西的典型值。
任何帮助将不胜感激。
#include <vector>
#include "Account.h"
class Portfolio
{
private:
std::vector<Account> accounts;
public:
double calculateNetWorth();
Portfolio();
void addAccount(std::string name, double balance);
void displayAccounts();
};
Run Code Online (Sandbox Code Playgroud)
#include "Account.h"
double Account::getBalance() {
return balance;
}
Account::Account(std::string name, double balance){
this->name = name;
this->balance = balance;
}
Run Code Online (Sandbox Code Playgroud)
#include <string>
class Account
{
private:
std::string name;
double balance;
public:
double getBalance();
Account(std::string name, double balance);
};
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
#include <string>
double Portfolio::calculateNetWorth() {
double total = 0; …Run Code Online (Sandbox Code Playgroud) 我实际上是 C++ 的新手,我试图弄清楚编译器如何执行以下行:
pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients ());
Run Code Online (Sandbox Code Playgroud)
我知道pcl::ModelCoefficents()创建了一个类型的堆内存并将其指针传递给 function coefficients()。让我感到困惑的是,我们不应该使用如下所示的箭头运算符:
pcl::ModelCoefficients::Ptr->coefficients (new pcl::ModelCoefficients ());
Run Code Online (Sandbox Code Playgroud) 这是我正在编写的 dll 注入代码中的一段。我正在使用FindWindowA() 中定义的窗口过程获取 HWND INJ_PROC_NAME。问题是该函数总是返回 0,当我用GetLastError()它检查错误时也返回 0。我不知道是什么问题,因为错误代码没有给我关于错误的正确信息。
HWND Hwnd = FindWindowA(NULL, INJ_PROC_NAME);
if (Hwnd == NULL)
{
std::cout << "Couldn't find window named \"" << INJ_PROC_NAME << "\": error-"
<< GetLastError() << std::endl;
getchar();
return -1;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
Couldn't find window named "notepad.exe": error-0
Run Code Online (Sandbox Code Playgroud)
这是一个已知的问题?我无法在 Microsoft 的文档或堆栈溢出中找到有关它的任何信息。我就是想不通这个...
编辑:显然,当我运行程序时,记事本是打开的。
练习是:
使用嵌套循环产生以下模式
A
BC
DEF
GHIJ
KLMNO
PQRSTU
Run Code Online (Sandbox Code Playgroud)
我写的是这样的:
#include <stdio.h>
int main(void)
{
char ch[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int x,y;
int min,max,i;
min=max=0;
i=1;
for(x=0;x<6;x++)
{
for(y=min;y<=max;y++){
printf("%c",ch[y]);
}
min=max+1;
max+=i+1;
i++;
printf("\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有没有一种我想不到的更简单、更好的方法?
您应该有一个条件,该条件应评估为真或假,以使if语句起作用。我不明白p=fopen("test.txt", "r")以下代码的一部分如何计算为真或假,因为它只包含一个赋值运算符=而不是一个==运算符。
#include <stdio.h>
int main()
{
FILE *p;
if(p=fopen("test.txt","r"))
{
printf("yes\n");
}
else
printf("no\n");
return 0;
Run Code Online (Sandbox Code Playgroud) 我正在将 c 代码移植到 c++。下面的 C 程序编译成功。但是在 C++ 中,它会引发错误。我知道它非常基本的东西。我以这种方式声明了 100 多个函数。是否有任何标志我们可以添加以成功编译而不是修改所有函数。
int sum(m,n)
int m,n;
{
return m+n;
}
Run Code Online (Sandbox Code Playgroud) c ×6
c++ ×6
function ×2
winapi ×2
binary-tree ×1
char-pointer ×1
getchar ×1
if-statement ×1
loops ×1
pointers ×1
recursion ×1
scope ×1
selection ×1
stl ×1
visual-c++ ×1
windows ×1