printf("\nframe is: %p",&frame);
printf("\nframeprev is: %p",&framePrev);
首先出现的任何行都将始终正确打印。 无论打印哪个指针,第二行将始终在上面的代码中进行分段。任何想法为什么这是?我试过fflush(stdout);在每个printf之后,但这似乎没有区别。
使用以下
对指针进行delcairedframe =(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;
}
}
答案 0 :(得分:2)
我不知道为什么你提供的代码会出现段错误。但是,您要打印的是指针的地址,而不是指针的内容。换句话说,frame是一个指针变量;它是4个字节大,并且存在于某个堆栈/堆上。你打印出某处的地址。我认为你想要的是打印框架的价值;这将是框架所持有的实际指针。所以脱掉&amp;在每一行,看看你得到了什么。
另外,你的内存分配很奇怪。 A(double **)是一个指向数组的指针,该数组包含指向双精度的指针;但是你的malloc调用会分配一个包含双精度数组的数组。你可能想要malloc(cols * sizeof(double *))。这个代码有效,因为double大于double *,所以你实际上分配了足够的内存,但它仍然是错误的。
答案 1 :(得分:1)
您的printf语句没有任何问题。如果你是segfaulting,可能是因为你的例程中有一个错误并且已经破坏了内存。
你发布的一个明显的问题是你的frame和frameprev数组不是双精度数组,而是双指针数,并且它们的大小不一样。前两行应该是:
frame =(double**) malloc(cols*sizeof(double *));
framePrev =(double**) malloc(cols*sizeof(double *));
答案 2 :(得分:0)
将代码放入test.cpp文件中,如下所示:
int main(){
int i, cols=4, rows=2;
double **frame =(double**) malloc(cols*sizeof(double));
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;
}
}
printf("\nframe is: %p",&frame);
printf("\nframeprev is: %p",&framePrev);
}
通过g ++ test.cpp编译,通过./a.out - &gt;
运行frame is: 0x7fff5fbffaf8
frameprev is: 0x7fff5fbffaf0
根本没有分裂。
你怎么编译?您的帖子中现在显示的代码的任何其他更改? 你如何初始化变量?
个REG。