这个 sysmalloc: Assertion 是什么类型的错误?
What kind of error is this sysmalloc: Assertion?
任何人都可以解释为什么我会收到此错误以及我该如何纠正它?
#include<stdio.h>
#include<stdlib.h>
char makemeunique(char *s,int l)
{
char *xp=(char *)malloc(l*sizeof(char));
int *pp=xp;
for(int i=1;i<l; i++)
{
int yes=0;
for(int j=i-1;j>=0; j--)
{
if(s[i]==s[j])
yes=1;
}
if(yes-1)
*pp++=s[i];
}
*pp='[=10=]';
printf("%s\n",xp);
return xp;
}
主要功能
int main()
{
char s[9999],x [9999];
scanf("%s\n%s",s,x);
char *p1, *p2;
p1=makemeunique(s, strlen(s));
p2=makemeunique(x, strlen(x));
}
我的输出:
Hello: malloc.c:2385: sysmalloc: Assertion (old_top == initial_top (av) && old_size == 0) || ((uns igned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pa gesize - 1)) == 0)' failed. Aborted (core dumped)
这个输出是什么意思??
这个程序只是获取两个字符串并调用函数并将创建的堆数组存储在指针中。
这是我的程序和输出:
您在 :
创建了错误的指针类型
int *pp=xp;
pp 应该是 char* :每次你做 *pp++ 你添加 sizeof(int) 而不是 sizeof(char) :结果是你超出分配的内存到 xp,这可能导致通常的 C 未定义行为。
任何人都可以解释为什么我会收到此错误以及我该如何纠正它?
#include<stdio.h>
#include<stdlib.h>
char makemeunique(char *s,int l)
{
char *xp=(char *)malloc(l*sizeof(char));
int *pp=xp;
for(int i=1;i<l; i++)
{
int yes=0;
for(int j=i-1;j>=0; j--)
{
if(s[i]==s[j])
yes=1;
}
if(yes-1)
*pp++=s[i];
}
*pp='[=10=]';
printf("%s\n",xp);
return xp;
}
主要功能
int main()
{
char s[9999],x [9999];
scanf("%s\n%s",s,x);
char *p1, *p2;
p1=makemeunique(s, strlen(s));
p2=makemeunique(x, strlen(x));
}
我的输出:
Hello: malloc.c:2385: sysmalloc: Assertion (old_top == initial_top (av) && old_size == 0) || ((uns igned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pa gesize - 1)) == 0)' failed. Aborted (core dumped)
这个输出是什么意思??
这个程序只是获取两个字符串并调用函数并将创建的堆数组存储在指针中。
这是我的程序和输出:
您在 :
创建了错误的指针类型int *pp=xp;
pp 应该是 char* :每次你做 *pp++ 你添加 sizeof(int) 而不是 sizeof(char) :结果是你超出分配的内存到 xp,这可能导致通常的 C 未定义行为。