n; -6ren">
gpt4 book ai didi

c++ - 使用指针时遇到错误 "The NTVDM CPU has encountered an illegal instruction"

转载 作者:行者123 更新时间:2023-11-30 20:27:21 24 4
gpt4 key购买 nike

在创建合并排序程序时,我在使用指针而不是数组时遇到错误。以下代码运行正确:

void main()
{
clrscr();
int n,i,A[100];
cout<<"Enter the value of n: ";
cin>>n;
cout<<"\nEnter the array: ";
for(i=0;i<n;i++)
cin>>A[i];
mergesort(A,0,n-1);
cout<<"Sorted array is: ";
for(i=0;i<n;i++)
cout<<A[i]<<" ";
getch();
}

但是当我在 main 中用 *A 替换 A[100] 时,即主定义如下:

void main()
{
clrscr();
int n,i,*A;
cout<<"Enter the value of n: ";
cin>>n;
cout<<"\nEnter the array: ";
for(i=0;i<n;i++)
cin>>A[i];
mergesort(A,0,n-1);
cout<<"Sorted array is: ";
for(i=0;i<n;i++)
cout<<A[i]<<" ";
getch();
}

然后程序也会给出正确的输出,但在退出控制台窗口之前它会给出错误“NTVDM CPU 遇到非法指令”。当我将数组输入代码放在单独的函数中时,我不会收到上述错误,即当代码变为以下内容时:

int getList(int* A)
{
int n;
cout<<"\nEnter the value of n: ";
cin>>n;
cout<<"\nEnter the array: ";
for(int i=0;i<n;i++)
cin>>A[i];
return n;
}

void main()
{
clrscr();
int n,*A;
n=getList(A);
mergesort(A,0,n-1);
cout<<"Sorted array is: ";
for(int i=0;i<n;i++)
cout<<A[i]<<" ";
getch();
}

然后我就不会收到非法指令错误。有人可以帮忙吗?

最佳答案

您已经声明了一个指针,int *A,但没有内存可供它指向。声明后,添加

A = malloc(100 * sizeof(int));

并在 main 退出之前添加:

free(A);

当您从静态数组转换为使用动态内存(因此显式使用指针)时,您需要手动分配内存。

此外,在声明指针时将指针分配给 NULL 是一种很好的形式:

int *A = NULL;

这将使调试更容易 - 当您尝试取消引用指针时,您将得到一个空指针异常,而不是当您的内存损坏时出现随机错误。

顺便说一句,malloc 可能会失败(它将返回 NULL)。因此,您应该在 malloc 调用之后对 A 进行检查:

if (NULL == A) {

// do some error handling

}

关于c++ - 使用指针时遇到错误 "The NTVDM CPU has encountered an illegal instruction",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20642428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com