我已經得到了C代碼。我在GCC-4.8.1上運行時遇到了一個奇怪的行爲(它編譯時沒有警告和錯誤)。
當我輸入R和C爲任意整數(R =Ç),我到輸入動態分配的2D陣列,但是,當I輸入R和C說,分別(R> c)中,我得到一個不發送Windows錯誤。我相信這可能是由於一些非法指針間接,但我不知道它是什麼。 你能幫我找到它嗎?
下面是代碼:
指針在程序中的誤導
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
int main()
{
int no_of_test_cases;
int r, c;
int i,j;
printf("Enter the no of test cases:\n");
scanf("%d", &no_of_test_cases);
printf("Enter the no of rows:\n");
scanf("%d", &r);
printf("Enter the no of columns:\n");
scanf("%d", &c);
r+=2;
c+=2;
//Dynamically allocate the 2D array
char **string_pattern;
string_pattern = (char**)malloc(r* sizeof(char*));
if(string_pattern==NULL)
{
printf("Not enough memory");
exit(0);
}
for(i=0; i<c; i++)
{
string_pattern[i] = (char*)malloc(c* sizeof(char));
if(string_pattern[i]==NULL)
{
printf("Not enough memory");
exit(0);
}
}
//Now lets put a wall around with the character '#'
j=0;
for(i=0; i<r; i++)
{
string_pattern[i][j]='#';
}
j=0;
for(i=0; i<c; i++)
{
string_pattern[j][i]='#';
}
j=c-1;
for(i=0; i<r; i++)
{
string_pattern[i][j]='#';
}
j=r-1;
for(i=0; i<c; i++)
{
string_pattern[j][i]='#';
}
printf("haha");
//Now lets input the array
for(i=1; i<r-1; i++)
{
for(j=1; j<c-1; j++)
{
scanf(" %c",&string_pattern[i][j]); /*whitespace preceding the %c is to skip
a non whitespace character in the input buffer*/
}
}
for(i=0; i<r; i++)
{
for(j=0; j<c; j++)
{
printf("%c",string_pattern[i][j]);
}
printf("\n");
}
return 0;
}
你是什麼輸入和您的預期輸出?此外,內存泄漏,因爲你沒有釋放你分配的內存。 – tillaert 2014-11-03 07:30:40
@tillaert是的,我沒有釋放內存,但爲什麼它爲r和c的特定值工作?預期的輸出很簡單:首先讓我動態分配內存然後讓我輸入數組然後顯示em。 – 2014-11-03 07:32:30