2014-01-07 177 views
0

我的代碼:錯誤調試斷言失敗

#include<stdio.h> 
#include<conio.h> 
#include<time.h> 
#include<stdlib.h> 

void nhap(int **s, int line, int column) 
{ 
int x; 
srand((unsigned int)time(NULL)); 
for(int i=0; i<line; i++) 
    for(int j=0; j<column; j++) 
    { 
     x=rand()%10+0; 
     *(*(s+i)+j)=x; 
    } 

} 

void xuat(int **s, int line, int column) 
{ 
for(int i=0; i<line; i++) 
{ 
    printf("\n"); 
    for(int j=0; j<column; j++) 
     printf("%3d",s[i][j]); 
} 
} 

int main() 
{ 
int line,column; 
printf("\nLine: "); scanf("%d",&line); 
printf("\nColumn: "); scanf("%d",&column); 

int **s=new int*[line]; 
for(int i=0; i<line; i++) 
    s[i]=new int[column]; 

nhap(s,line,column); 
xuat(s,line,column); 

getch(); 
for(int i=0; i<line; i++) 
    delete[] (s+i); 
delete[] s; 
} 

錯誤:調試斷言失敗! Exspression:_BLOCK_TYPE_IS_VALID。 有關程序如何導致斷言失敗的信息,請參閱有關斷言的Visual C++文檔。

+0

在我的電腦上運行正常.. Windows + Visual Studio 10 –

+2

你不一致,'*(*(s + i)+ j)'和's [i] [j]'。你應該堅持以後,使用起來更簡單。 –

+0

哦,不,這不是錯誤。謝謝! – Hoang

回答

2

delete [] (s+i);是你的錯誤。爲了清楚起見,你應該堅持使用常規的數組語法。 *(s+i)的東西是等價的,但難以閱讀/理解。所以我會用delete [] s[i]

+0

非常感謝你。我成功了 – Hoang