我在使用变量作为数组索引时遇到问题代码基本上是这样的:

int index;
void main() {
    index = 1;
    doStuff();
}
void doStuff() {
    char** myArray;
    myArray[0] = (char*)"Foo";
    myArray[1] = (char*)"Bar";
    print("%s", myArray[index]);
}

如果我这样做了:
print("%s", myArray[1]);

它工作得很好。有人能帮我吗?
它应该只是C代码,但如果它是重要的,它的视差芯片,我使用简单的IDE。

最佳答案

你的阵型

char** myArray;

不是真正的数组。它是一个指针在你分配之前,它不会指向任何地方。任何对它的取消引用都会产生未定义的行为。
取消对未定义指针的引用正是您在这里所做的:
myArray[0] = (char*)"Foo";

因为指针没有指向有效的内存块,所以这不起作用。你需要做的是先分配myArray。例如,您可以使用malloc
char** myArray = malloc(2 * sizeof(char*));

你的代码现在可以工作了。为了避免内存泄漏,在free(myArray)函数的末尾添加doStuff

关于c - C-数组不能使用变量作为索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25227840/

10-15 01:59