【发布时间】:2016-03-28 05:32:13
【问题描述】:
下面是我的程序未完成的代码,但在当前阶段,我遇到了错误(Xcode 日志:Subscripted value is not array, pointer or vector)。我想它与内存分配有关。当我尝试将值 1 分配给 (*map[x2][y2]).exist 和 map[x1][y1] = NULL; 时,if 语句中会出现此错误。您能否展示为这些变量赋值的正确方法。
提前谢谢你!
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int num;
_Bool exist;
}name;
int main(void){
name* map[10][10];
name* guy;
guy = (name*)malloc(10*sizeof(name));
int x1, y1, x2, y2;
int m, n, o;
for(m = 0; m < 10; m++){
for(n = 0; n < 10; n++){
map[m][n] = NULL;
}
}
for(o = 0; o < 10; o++){
(*(guy+o)).num = rand() % 4;
(*(guy+o)).exist = 1;
do{
m = rand() % 10;
n = rand() % 10;
}while (map[m][n] != NULL);
map[m][n] = guy + o;
}
if(map[x2][y2] == NULL){
name *map = malloc(10*10*sizeof(name));
(*map[x2][y2]).exist = 1;
map[x1][y1] = NULL;
}
return 0;
}
【问题讨论】:
-
你猜错了。解释你打算
(*map[x2][y2])做什么? -
@WhozCraig 我想将值 1 分配给
(*map[x2][y2]) -
@WhozCraig 我正在制作一个游戏,其中某个点应该穿过场地并避开障碍物
-
请注意,我没有对那个问题进行赋值或赋值。表达式
(*map[x2][y2])本身。而且您意识到您使用的标识符map与在main()中找到一个范围级别的标识符相同,对吗?name *map = ...正在声明该 if 块范围的本地变量。 (并泄漏您在该过程中分配的内存)。仅供参考,x2和y2都不会在 if 测试之前使用任何确定的值进行初始化。 -
不完全是泄漏 - 可能更糟糕的是,隐藏。在
main()原始map之外的任何函数中都会神奇地重新出现.....
标签: c memory allocation