今天随手练习一下,遇到了个问题。如下代码为默认输入和结果均为正值的手工减法模拟。
但是在这一行会seg fault:
但是在这一行会seg fault:
reminus(k[0],k[1],k[2],lt,lt+1,lt+2);
不知为何会这样。貌似跟内存分配方式有关?
#include
inline void reminus( char *n1p, char *n2p, char *resp, int *ln1, int *ln2, int *lres,bool ischar=false){
int i=0;
minus();
puts("===========");
for(i=0;i<(*ln2);i++) {
minus(n1p+i,n2p+i,resp+i,true,ischar);
}
for(;i<(*ln1);i++)minus(n1p+i,0,resp+i,true,ischar);
i-=1;
for(;i>=0 && !resp[i]; i--);
*lres = i+1;
}
inline void reminus( char *n1p, char *n2p, char *resp, int *ln1, int *ln2, int *lres,bool ischar=false){
int i=0;
minus();
puts("===========");
for(i=0;i<(*ln2);i++) {
minus(n1p+i,n2p+i,resp+i,true,ischar);
}
for(;i<(*ln1);i++)minus(n1p+i,0,resp+i,true,ischar);
i-=1;
for(;i>=0 && !resp[i]; i--);
*lres = i+1;
}
int main(){
char t[3][5]={"1234","0234","0000"};
char* k[3]={"1234","0234","0000"};
int lt[3]={4,4,0};
reminus(t[0],t[1],t[2],lt,lt+1,lt+2);
reminus(k[0],k[1],k[2],lt,lt+1,lt+2);
}