【发布时间】:2011-04-05 13:51:03
【问题描述】:
printf("\nframe is: %p",&frame);
printf("\nframeprev is: %p",&framePrev);
首先出现的行总是会正确打印。 第二行将始终在上面的代码中出现段错误,无论它正在打印哪个指针。任何想法为什么这是?我试过 fflush(stdout);在每个 printf 之后,但这似乎没有什么区别。
指针使用以下方法进行删除
frame =(double**) malloc(cols*sizeof(double));
framePrev =(double**) malloc(cols*sizeof(double));
if(frame==NULL||framePrev==NULL){
printf("malloc epic fail\n");
return 0;
}
/*allocate mem for 2nd dimention*/
for(i=0;i<cols;i++){
frame[i]=(double*) malloc(rows*sizeof(double));
framePrev[i]=(double*) malloc(rows*sizeof(double));
/*check for null pointer*/
if(frame[i]==NULL||framePrev[i]==NULL){
printf("malloc epic fail\n");
return 0;
}
}
【问题讨论】:
-
试试
gdb之类的调试器或valgrind之类的内存调试工具。它们可能会很快准确地显示出您的段错误。 -
你的意思是说printf()s在主代码之后?
-
printfs 位于 malloc 之后的 for 循环的顶部,但在第一次执行循环时,它会报告 2 个 printfs 之间的段错误 - 所以也许只是它在之后出现段错误而且 printf 很慢,我不太确定
-
frame N is: 0xbffff368 Program received signal SIGSEGV, Segmentation fault.是我得到的输出,我通常希望在下面打印第二条语句
标签: c pointers segmentation-fault printf