首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将argv[]复制到c中的整型数组时出错

将argv[]复制到c中的整型数组时出错
EN

Stack Overflow用户
提问于 2014-11-27 23:12:07
回答 2查看 76关注 0票数 0
代码语言:javascript
复制
# 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的信息。

EN

回答 2

Stack Overflow用户

发布于 2014-11-27 23:15:56

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

代码语言:javascript
复制
for (i=1;i<=(argc-2);i++)

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

代码语言:javascript
复制
for (i = 0; i < argc - 2; i++)

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

最好是防御性地处理命令行参数。(即检查argc的有效性等)。

票数 2
EN

Stack Overflow用户

发布于 2014-11-27 23:21:41

在传递命令行参数时,最好在继续之前检查argc的值。

代码语言:javascript
复制
if(argc != /* num of arguments */)
return;

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

这是错误的。

它必须是

代码语言:javascript
复制
for (i=0;i<argc-2;i++)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27173798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档