【发布时间】:2016-10-04 23:19:18
【问题描述】:
所以我已将代码范围缩小到我需要帮助的范围内。抱歉之前的文字墙和乱七八糟的代码。
// Headers
#include <stdio.h>
#include <stdlib.h>
// Function Protype
void test_function(int **ptr2);
// Main Function
int main(void) {
int *ptr1;
int i = 0; // Counter
test_function(&ptr1); // Calling function
for (i = 0; i < 10; i++) {
printf("%d", ptr[i]); // Should print numbers from 0-9
}
return 0;
}
// Custom Function
void test_function(int **ptr2) {
// Variables
int i = 0; // Counter
int j = 0; // Dynamic allocator
*ptr2 = malloc(sizeof(int) * j); // Allocates 10 slots of size int
for (i = 0; i < 10; i++) {
*ptr2[i] = i; // <----- This line gives a segmentation fault error
}
return;
}
所以基本上,这个程序应该使用 malloc 遍历一个数组以分配 j 的动态大小,输入数字 0-9 并将 0-9 显示给用户。然而,函数test_function 中被注释的行给了我一个分段错误错误。
【问题讨论】:
-
使用调试器。至少它会告诉您哪行代码触发了段错误,这是您应该与我们分享的信息。另外,尽量让你的问题简洁:代码、它应该做什么以及它实际上在做什么。例如,为什么要显示两个版本的代码?我们应该从中得到什么,你真正要问的是哪一个?
-
安装 GDB(GNU 调试器)它会花 10 分钟找出你的错误
-
我们应该如何调试整个程序?减少它。
-
应该删除
spacePos = malloc(sizeof(*spacePos[j]));和printf("%p", spacePos[j]);行。*spacePos[j]也应该是(*spacePos)[j] -
在更新的代码中,将
*ptr2[i]改为(*ptr2)[i]
标签: c arrays string pointers malloc