그래서 두 가지 문제가 있습니다.배열 값이 변경됨
저는 이것을 코딩하기 위해 netbeans를 사용하고 있습니다.
첫 번째는 c.sArr에서 설정하는 배열 값이 7에서 임의의 숫자로 변경된다는 것입니다. 이유는 알 수 없습니다.
두 번째는 netbeans에서 디버그를 실행하려고하면 코드가 segfault를 제공한다는 반면, 정상적으로 실행할 때는 segfault를 제공한다는 것입니다. atoi 함수에서 segfault를 제공합니다.
무슨 일이 벌어지고 있니?
#include <stdio.h>
#include <stdlib.h>
#include "spoonMatrix.c"
int main(int argc, char** argv) {
int iterations;
int argCounter = 0;
int debug = 1;
int i,j,q;
if(argc < 2)
return -1;
if(debug == 1){
for(q=0;q<argc;q++)
printf("%s\n", argv[argCounter++]); //Checking the params
}
argCounter = 1;
iterations = atoi(argv[argCounter++]);
if(debug == 1)
printf("%d", iterations);
for(i=0;i<iterations;i++){
int rows = 0;
int columns = 0;
int m = 0, n, p, elemCount;
int posCount = 0;
int temp;
cm c;
c.row = rows;
c.column = columns;
c.elems = (char*)calloc(rows*columns, sizeof(char));
c.sArr = (int*)calloc(rows*columns, sizeof(int));
rows = atoi(argv[argCounter++]);
columns = atoi(argv[argCounter++]);
for(m=0;m<rows*columns;m++)
{
c.sArr[m] = -2;
//printf("Here");
}
if(debug == 1)
{
printf("Rows : Columns - %d : %d\n", rows, columns);
}
temp = argCounter;
printf("argCounter is: %d\n", argCounter);
for(elemCount = 0 ; argCounter < temp + rows; argCounter++)
{
for(n=0; n<columns; n++, elemCount++)
{
c.elems[elemCount] = argv[argCounter][n];
//if(debug == 1)
// printf("%c\t", c.elems[elemCount]);
if(c.elems[elemCount]== 's' || c.elems[elemCount] == 'S')
{
c.sArr[posCount] = elemCount;
printf("%c\t%d\t%d\t%d\n", c.elems[elemCount], elemCount, c.sArr[posCount++], posCount);
}
}
}
printf("%d\n", c.sArr[0]);
if(debug == 1)
{
for(j=0; j<rows*columns; j++)
{
printf("%c ", c.elems[j]);
}
printf("\n");
for(j=0;j<rows*columns;j++)
{
printf("%d ", c.sArr[j]);
}
}
}
return (EXIT_SUCCESS);
}
및
다른 파일은 : 서둘러 코딩
struct charMat{
int row;
int column;
char* elems;
int* sArr;
};
typedef struct charMat cm;
이, 이상한 디버깅 문을 변명.
감사
왜 .c 파일을'포함합니까? ' –
* 이상한 디버깅 구문을 용서할 수 있습니다. * <- 여전히 10 초 이내에 편집하고 삭제할 수 있습니다. –
어떤 atoi가 작동합니까? – Saphrosit