C 当试图为动态分配的2D数组赋值时,程序崩溃
我正试图为我的C编程课的最后一个项目编写一些东西,但我遇到了一个无法解决的问题。我的代码是:C 当试图为动态分配的2D数组赋值时,程序崩溃,c,arrays,malloc,2d,C,Arrays,Malloc,2d,我正试图为我的C编程课的最后一个项目编写一些东西,但我遇到了一个无法解决的问题。我的代码是: #include <stdio.h> #include <stdlib.h> char** allocateLevel(int sizeOfLevel); int main(void) { char** level = allocateLevel(10); int one, two; for(one = 0 ; one < 10 ; one++
#include <stdio.h>
#include <stdlib.h>
char** allocateLevel(int sizeOfLevel);
int main(void)
{
char** level = allocateLevel(10);
int one, two;
for(one = 0 ; one < 10 ; one++)
{
for(two = 0 ; two < 10 ; two++)
{
level[one][two]='T'; //Crashes right here
}
}
printf("%c", level[4][5]); //tests to see if it prints
}
char** allocateLevel(int sizeOfLevel)
{
char **levelPointer;
levelPointer = (char **)malloc(sizeOfLevel * sizeof(char **));
int count = 0;
for(count = 0 ; count < sizeOfLevel ; count++)
{
levelPointer[count] = (char*) malloc(sizeOfLevel * sizeof(char*));
}
}
#包括
#包括
字符**分配级别(int sizeOfLevel);
内部主(空)
{
字符**级别=分配级别(10);
int一,二;
对于(一个=0;一个<10;一个++)
{
对于(两个=0;两个<10;两个++)
{
级别[1][2]='T';//就在这里崩溃
}
}
printf(“%c”,级别[4][5]);//测试是否打印
}
字符**分配级别(整数大小级别)
{
字符**levelPointer;
levelPointer=(char**)malloc(sizeOfLevel*sizeof(char**));
整数计数=0;
对于(计数=0;计数
程序很好地分配了内存,但当我试图给其中一个元素赋值时,它崩溃了。我不知道出了什么问题,我的教授也没帮上什么忙。有什么问题吗?在函数
allocateLevel
中,您不返回任何内容。因此,最终为level
的值几乎没有定义
返回levelPointer代码>在函数的末尾allocateLevel
大小都有一定程度的间接偏差
levelPointer = (char **)malloc(sizeOfLevel * sizeof(char **));
我可以看到两个问题:
1)您已将malloc()
2)sizeof(char**)代码>与寻址相关(==8
(64位),==4
(32位)。可能不是您期望的结果?)
sizeof
运算符计算变量或类型的字节数。您的使用会给您带来意想不到的结果:运行以下示例:
int main()
{
cout << "Size of char ** : " << sizeof(char **) << endl;
cout << "Size of char : " << sizeof(char) << endl;
cout << "Size of int : " << sizeof(int) << endl;
cout << "Size of short int : " << sizeof(short int) << endl;
cout << "Size of long int : " << sizeof(long int) << endl;
cout << "Size of float : " << sizeof(float) << endl;
cout << "Size of double : " << sizeof(double) << endl;
cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;
return 0;
}
用于释放完成后分配的内存
void freeMemory(char ** a, int numStrings)
{
int i;
for(i=0;i<numStrings; i++)
if(a[i]) free(a[i]);
free(a);
}
void freemory(字符**a,整数字符串)
{
int i;
对于(i=0;我查看一下您的sizeof
用法。以及allocateLevel()
中的return
语句在哪里?它到底出了什么问题?哇,我真的很笨。这是我的return语句。谢谢。您也应该修复sizeof
语句。第一个应该是sizeof(char*)
,第二个应该是sizeof(char)
(或者干脆省去它,因为sizeof(char)
是1)。为了避免malloc大小问题,请使用这个习惯用法,其中p
是指针,N
是需要多少元素:p=malloc(N*sizeof*p);
void freeMemory(char ** a, int numStrings)
{
int i;
for(i=0;i<numStrings; i++)
if(a[i]) free(a[i]);
free(a);
}