c语言使用malloc的访问冲突

Access violation using malloc c language

我正在与另一个人合作的这个程序 运行 在某些时候还不错。然后有时它会崩溃,但在重新启动 Windows 后 运行 再次正常。非常断断续续,现在总是崩溃。在某些时候,我想可能是因为我以某种方式升级到 Windows 10(我知道)。在我的 Windows 10 机器上,它现在无论如何总是崩溃。

所以我在我的 Windows 7 机器上安装了 VS,然后又出现了不同的行为。

所以它 运行 没问题,但如果 运行 没有调试就没有输出。

如果我 运行 调试它会在以下代码部分分配内存时触发未处理的异常断点。

/*
* clone()
* Precondition: s is defined and not NULL
* Postcondition: a copy of s has been returned
* Informally: Clone a sample
*/

sample clone(sample s)
{
    sample c;

    c = (sample)malloc(sizeof(struct sample_int)); //<-----exception error

    c->name = (char *)malloc((strlen(s->name) + 1)*sizeof(char));
    strcpy(c->name, s->name);

    c->sequence = (char *)malloc((strlen(s->sequence) + 1)*sizeof(char));
    strcpy(c->sequence, s->sequence);

    c->match = s->match;

    return c;
}

单击“继续”时,出现位置访问冲突...错误。

到这个阶段,它是第 2 次调用该函数。下面是 sample.c

的头文件
/*
 * Specification for the Sample ADT
 * Author Julian Dermoudy
 * Version 20/8/15
 */

#ifndef SAMPLE_H
#define SAMPLE_H

struct sample_int;
typedef struct sample_int *sample;

void init_sample(sample *s, char *name, char *sequence);
char *getName(sample s);
char *getSequence(sample s);
int getMatch(sample s);
void setName(sample s, char *name);
void setSequence(sample s, char *name);
void setMatch(sample s, int m);
sample clone(sample s);
char *toString(sample s);

#endif

克隆函数正在使用所有字段中包含数据的现有样本结构。

我是否遗漏了有关 malloc 的信息?为什么它似乎在一台计算机上运行良好,而在另一台计算机上却出现此异常错误?

如有任何建议,我们将不胜感激。

只是想回答很久以前我还是一个没有代表回答的菜鸟时的这个老问题。 (最初通过对问题的更新来回答)。

在代码的其他地方,我分配了指向结构的指针大小的内存。 我猜这会导致内存分配出现微小的过剩或错位。

不确定原因,但这会导致下一次使用 malloc 崩溃,但仅在特定环境条件下才会崩溃。

在问题代码执行很久之后发生的崩溃导致我在所有错误的地方寻找问题。最后我坐下来重写了整个程序,直到最后我注意到一行代码正在分配 sizeof(一个指针)。‍♂️

因此分配 sizeof(实际结构)而不是 sizeof(指向结构的指针)解决了所有问题。