gpt4 book ai didi

C 未知长度字符串的二维数组,访问元素时崩溃

转载 作者:行者123 更新时间:2023-11-30 14:50:39 25 4
gpt4 key购买 nike

所以我遇到了这个错误,到目前为止我似乎找不到答案,如果之前有人问过这个问题,我深表歉意。以下是受影响的代码:

char **List_Of_Words;
int List_Index=0;

List_Of_Words = malloc(Number_of_Words *sizeof(char*));

//Processed_Word word is a word that has been read from a file, its in a loop.
strcpy(*List_Of_Words[List_Index], Processed_Word);
List_Index++;


//im looping through the array to print each word thats stored there
for(int i = 0;i < List_Index; i++)
{
printf("%s\n", *List_Of_Words[List_Index]);
}

当我使用 Visual Studio 进行调试时,出现此错误:

Unhandled exception at 0x01229240 in Wordcount.exe: 0xC0000005: Access violation writing location 0x00000030.

所以,我假设我的程序正在尝试访问它无权访问的内存。 C 对我来说是一门新语言,所以我真的不知道如何处理这个问题。

最佳答案

您的代码存在许多问题。

首先您没有分配足够的内存。 List_Of_Words 需要为每个单词分配足够的内存,您做得很好。但每个 List_Of_Words[] 也需要分配内存来包含单词。

然后你就这样做了,这是错误的,因为你传递的是 char 作为第一个参数,而不是 char *

strcpy(*List_Of_Words[List_Index], Processed_Word);

解决此问题和上一个问题,您的代码应如下所示

List_Of_Words[List_Index]=malloc(strlen(Processed_Word)+1);
strcpy(List_Of_Words[List_Index], Processed_Word);

或者如果可用,您可以使用 strdup 将两行合并为一行

List_Of_Words[List_Index]=strdup(Processed_Word);

在打印字符串时也会重复过度取消引用的问题,所以它应该看起来像

printf("%s\n", List_Of_Words[i]);

当然,除非您只是打印出第一个字符,在这种情况下您应该使用 %c 格式化代码。

关于C 未知长度字符串的二维数组,访问元素时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48904795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com