Visual c++ Can';t使用char*属性上的memcpy作为目标-visualc++;

Visual c++ Can';t使用char*属性上的memcpy作为目标-visualc++;,visual-c++,memcpy,Visual C++,Memcpy,我在appPOSWebDlg.cpp中有以下代码: #包括“stdafx.h” #包括“afx.h” #包括 #包括 ... //属性 字符*站点; ... //方法 int readFile(){ char*aux; int结果; 结果=读取参数(hFile,aux); 如果(结果==0){ memcpy(现场,辅助,256); }否则{ 返回1; } 返回0; } 但是程序在memcpy行停止,我不知道为什么。调试后,我可以确认aux参数是否正确分配了预期值。此外,我甚至在readPara

我在appPOSWebDlg.cpp中有以下代码:

#包括“stdafx.h”
#包括“afx.h”
#包括
#包括
...
//属性
字符*站点;
...
//方法
int readFile(){
char*aux;
int结果;
结果=读取参数(hFile,aux);
如果(结果==0){
memcpy(现场,辅助,256);
}否则{
返回1;
}
返回0;
}

但是程序在memcpy行停止,我不知道为什么。调试后,我可以确认aux参数是否正确分配了预期值。此外,我甚至在readParameter方法中使用memcpy来分配它,并且没有问题。那么为什么我不能使用相同的方法将该值分配给属性site呢?

您的“site”指针无效。您已经将其定义为指针,但没有为其分配任何空间,因此,您的copy命令覆盖了一些代码。完成后,您需要通过执行“新建”和“删除”来正确分配指针。

您所说的“停止”是什么意思?您是否遇到异常(如写入无效地址),它是否只是挂起,快速退出流程而不显示任何消息?
site
aux
是如何初始化的?它们是否包含有效的指针,这些指针是否指向大小至少为256字节的内存块?它可以在没有消息的情况下快速退出进程。aux和站点未初始化。它们仅按照代码中所示进行声明。问题是我可以在aux中使用memcpy,但由于某种原因不能在site中使用。在这种情况下(假设
site
实际上是一个全局变量,如发布的代码段所示),那么
site
由编译器初始化为null,这
aux
是一个不确定的值。这两个值都不能有效地传递给
memcpy()
,并且
aux
在显式初始化之前不能用于任何事情。那么为什么我能够在memcpy方法中使用aux变量呢?我没有给它分配任何空间either@DanielCalderonMori:如果您使用未初始化的变量,系统将以令人惊讶的方式运行-这可能包括看起来没有行为不当。@MichaelBurr谢谢,这非常有帮助。赛艇手的回答确实是正确的。但我必须初始化这两个变量,以确保代码不会表现得异常。
#include "stdafx.h"
#include "afx.h"
#include <stdlib.h>
#include <Ras.h>
...

//Attribute
char            *site;
...

// Method
int readFile() {

    char * aux;
    int result;

    result = readParameter(hFile, aux);
    if (result == 0) {
        memcpy(site, aux, 256);
    } else {
        return 1;
    }
    return 0;
}