为什么以下代码会产生分段错误?
Why is the following code producing segmentation fault?
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int *ptr;
int max;
int i=0,number=0;
printf("Enter the size of array \n");
if( scanf("%i",&max) != 1)
{
printf("number not enterd correctly\n");
exit(EXIT_FAILURE);
}
ptr=(int *)malloc(max * sizeof(int));
if(ptr=NULL)
{
puts("Error in recieving memory");
exit(EXIT_FAILURE);
}
else
{
puts("Enter array");
while(i<max && scanf("%d",&ptr[i]) == 1)
++i;
/* number=i;
puts("Array entered is ");
for(i=0;i<number;i++)
printf("%i %i\n",i,ptr[i]);
*/
}
puts("Done!");
free(ptr);
return 0;
}
程序在没有任何 errors.On 运行 程序的情况下编译成功,在数组中输入第一个值后程序终止并使用 gcc 编译器进行分段 fault.I' ubuntu 12.04 运行 在 vmware 上。
if(ptr=NULL)
应该是 if(ptr == NULL)
。否则,您会将 ptr
设置为 NULL
并尝试访问它。通常,编译器应该对此发出警告。一些程序员正在使用以下方法来避免此类错误:
if(NULL == ptr)
。在这种情况下,如果您忘记了一个 =
,您将得到一个编译错误。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int *ptr;
int max;
int i=0,number=0;
printf("Enter the size of array \n");
if( scanf("%i",&max) != 1)
{
printf("number not enterd correctly\n");
exit(EXIT_FAILURE);
}
ptr=(int *)malloc(max * sizeof(int));
if(ptr=NULL)
{
puts("Error in recieving memory");
exit(EXIT_FAILURE);
}
else
{
puts("Enter array");
while(i<max && scanf("%d",&ptr[i]) == 1)
++i;
/* number=i;
puts("Array entered is ");
for(i=0;i<number;i++)
printf("%i %i\n",i,ptr[i]);
*/
}
puts("Done!");
free(ptr);
return 0;
}
程序在没有任何 errors.On 运行 程序的情况下编译成功,在数组中输入第一个值后程序终止并使用 gcc 编译器进行分段 fault.I' ubuntu 12.04 运行 在 vmware 上。
if(ptr=NULL)
应该是 if(ptr == NULL)
。否则,您会将 ptr
设置为 NULL
并尝试访问它。通常,编译器应该对此发出警告。一些程序员正在使用以下方法来避免此类错误:
if(NULL == ptr)
。在这种情况下,如果您忘记了一个 =
,您将得到一个编译错误。