我的项目是构建图书结构 - 并用用户参数填充。
涉及动态分配,数组和指针。
我的book
结构具有以下内容:
struct BOOK
{
char* author;
char** genders;
int totalGenders;
char* name;
int* chapterPages;
int totalChapters;
}typedef book;
当我尝试到达作者姓名时,结构中的第1行:
struct BOOK
{
char* author;
我做错了..我的代码在main:
int main()
{
book* b;
char authorChar[10] = { 0 };
int authorLen;
char* authorName;
// get author name
puts("please enter the name of the author");
scanf("%s", &authorChar);
authorLen = strlen(authorChar);
printf("%d", authorLen); //print to see that lentgh is correct.
authorName = (char*)calloc(authorLen, sizeof(char));
strcpy(authorName, authorChar);
puts("\n");
b->author = authorName;
printf("%d", b->author);
当我调试时,我遇到了问题:
b->author = authorName;
想法好吗? :)
答案 0 :(得分:3)
问题出在以下一行
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<shadedArtifactAttached>false</shadedArtifactAttached>
<createDependencyReducedPom>true</createDependencyReducedPom>
<relocations>
<relocation>
<pattern>com.fasterxml.jackson</pattern>
<shadedPattern>mypackage.com.fasterxml.jackson</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
此时, b->author = authorName;
未分配内存,即b
是未初始化的指针。它指向一些随机内存位置,它不是有效。任何访问无效内存的尝试都会调用undefined behavior。
您可以使用以下任一方法解决此问题:
在使用之前动态地将内存分配给b
,例如b
并检查是否成功。
将b = malloc(sizeof*b);
定义为b
类型的变量,而不是指向类型的指针。
尽管如此,book
至少应为int main()
,以符合标准。
答案 1 :(得分:1)
您忘记为b
变量进行内存分配。
b = malloc(sizeof(book));
b->author = malloc(sizeof(100000)); // replace value for the size you want