gpt4 book ai didi

c - 将 argv[] 处理为 c 中的 int 数组时出错

转载 作者:太空宇宙 更新时间:2023-11-04 08:33:43 25 4
gpt4 key购买 nike

# include <stdio.h>
# include <stdlib.h>
# include <stddef.h>
# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/shm.h>
# include <sys/sem.h>
# include <unistd.h>
# include <time.h>
# include <math.h>

int main(int argc, const char* argv[])
{
int i,j,x,shM, *shmPtr;
int *array_pid, *apotelesma, loops,y,N;
int *array1;
double a,b,temp;





shM=shmget(3002,sizeof(int),IPC_CREAT|0600);
shmPtr=(shM,0,0);


array1=(int*)malloc((argc-2)*sizeof(int));

if(array1==NULL)
printf("error in array1");

for (i=0;i<=(argc-2);i++)
{
array1[i]=atoi(argv[i]);

}

N=argc;
loops=atoi(argv[argc-1]);
array_pid=(int*)malloc(N*sizeof(int));

if (array_pid==NULL)
printf("error in array_pid");

apotelesma=(int*)malloc(N*sizeof(int));

if (apotelesma==NULL)
printf("error in apotelesma");

j=fork();

if (j>0)
{
array_pid[i]=j;


for (i=0;i<loops;i++)
{

srand(time(NULL));

if (i>0)
apotelesma[i]=*shmPtr;

y=(rand()%(argc-2));

array1[y]=*shmPtr;
printf("y=%d apotelesma=%d",y,apotelesma[i]);



}




*shmPtr=-1;





for (i=0;i<N;i++)
wait();


shmdt(shmPtr);
shmctl(shM,0,IPC_RMID);

exit(0);
}

else //child
{
while(1)
{

x=*shmPtr;
if(x<0)
{

exit(0);
}
a=rand();
b=rand();
temp=(pow((a-x/2),2)+pow((b-x/2),2));
temp=sqrt(temp);
if (temp<=x/2)
*shmPtr=1;
else
*shmPtr=0;


}


}

}

我再次发布整个代码,因为我不太确定段错误在哪里。我现在认为可能是导致问题的共享内存。感谢您提供有关计算 argv 的信息。

最佳答案

对于长度为 argc-2 的数组,只有 0argc - 3 的索引是有效的。所以这个

for (i=1;i<=(argc-2);i++)

是错误的,因为您正在访问 array[argc - 2]。应该是:

for (i = 0; i < argc - 2; i++)

请注意,可能有其他错误导致段错误,因为您没有提供调用程序的方式。

处理命令行参数时最好采取防御措施。 (即检查 argc 等的有效性)。

关于c - 将 argv[] 处理为 c 中的 int 数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27173798/

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