2014-01-07 139 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