C memcpy 在运行时崩溃
Posted
技术标签:
【中文标题】C memcpy 在运行时崩溃【英文标题】:C memcpy crashing at run time 【发布时间】:2021-06-09 09:47:27 【问题描述】:我有这个问题。 每当我尝试调用 StorageStore 时,它都会在运行时崩溃。 我不知道如何解决它。 我试过谷歌搜索,但我对指针有点缺乏经验。 提前致谢。
编辑:我用 gcc -Ofast 编译
uint8_t Storage[256];
typedef struct _QCPU
uint8_t pc; // 1
uint8_t *regs; // 7
uint8_t *dCache; // 8 (32)
uint8_t *iCache; // 8 (32)
uint8_t **port_table; // 8 (8)
void *str_load; // 8 (1)
void *str_store; // 8 (1)
struct Flags flags;
QCPU;
void StorageStore(QCPU *CPU, uint8_t Addr)
memcpy(Storage+(Addr & 0xE0), CPU->dCache, 32);
QCPU* init()
return (QCPU*) malloc(sizeof(QCPU)); // Return Allocated Pointer To QCPU
int main()
QCPU *cpu = init();
cpu->dCache[3] = 5;
StorageStore(cpu, 5);
free(cpu);
【问题讨论】:
指针不是数组。 行cpu->dCache[3] = 5;
取消引用未初始化的指针cpu->dCache
,然后写入找到5
的随机地址。
CPU->dCache
是一个未初始化的指针。
您可能会发现clang.llvm.org/docs/MemorySanitizer.html 很有帮助。
don't cast malloc
【参考方案1】:
在谷歌上搜索了未初始化的指针是什么之后 我意识到我的问题
谢谢你,Paul Hankin 和 Jiri Volejnik 的回答
我添加了这些行来修复它
QCPU* init()
QCPU* r = malloc(sizeof(QCPU)); // Allocated Pointer To QCPU
r->dCache = malloc(32);
r->iCache = malloc(32);
r->port_table = malloc(8);
return r;
【讨论】:
如果总是32,你也可以在结构中写uint8_t dCache[32];
。以上是关于C memcpy 在运行时崩溃的主要内容,如果未能解决你的问题,请参考以下文章